Spliter un fichier....

Signaler
Messages postés
27
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
20 novembre 2006
-
Messages postés
27
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
20 novembre 2006
-
salut le monde des programmeurs
j'ai deja posté un message sur le forum de VB sur le splitage de fichier...

"je cherche comment décomposer des lignes, que je récupére dans un fichier *.dat, en plusieurs cellules d'un tableau.

je m'explique, j'ai un fichier .dat qui contient plusieur milliers de lignes. chaque lignes est composée de texte et de séparateur ( soit "," soit ";").
ex: bonjour;damdam;04;;;marseille;...
je cherche un code qui me permette de récupérer le texte entre chaque séparateur.

merci d'avance à tous ceux qui répondront à ce message... "

un mail m'a été envoyé avec l'adresse d'une source mais je ne peux découper le fichier que par taille...

donc si quelqu'un peut m'aider....
merci d'avance

ps je suis débutant en c donc c'est pour ça que je reformule ma demande...
merci

5 réponses

Messages postés
27
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
20 novembre 2006

merci beaucoup de votre aide, j'ai réussi à faire ce que je voulais...
maintenant je cherche à le faire en C ou C++, parce que le VB c'est un peu lent... ou alors je ne connais pas les astuces pour optimiser mon code...

merci encore de votre aide

bonne continuation à tous
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Original: bonjour;damdam;04;;;marseille;
bon ok mais exactement tu veux obtenir quoi partant de cet exemple ?

bonjourdamdam04marseille
Serait ce cela ?

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
Faut utiliser la fonction 'strtok' !

tient j'tai fait un pt'it bout de code qui te permet d'afficher les lignes que tu souhaite a l'ecran :

=> Buffer represente le fichier en memoire !

un premier strtok permet de faire la recherche de la première occurance, par contre pour trouver les autres tu n'est plus obliger de specifier la chaine à parcourir, pour çà que j'ai fait une boucle for avec un strtok qui contient un NULL .

je sais pa si je m'exprime clairement mais voila le code !

*************************

// Split de fichier par ELGUEVEL

#include <windows.h>
#include <stdio.h>

/* Retourne la taille du fichier en octet */ (methode maizon)
int longFichier( FILE *ffile )
{
int len;

fseek(ffile, 0, SEEK_END);
len = ftell( ffile );
fseek(ffile, 0, SEEK_SET);

return len;
}

/* Entry Point */
void main ( int argc, char *argv[])
{

// DECLARATIONS

FILE *fichier;

char *trouve;
char *buffer, *memBuffer;

int fTaille = 0;

printf("\n\tSplitteur - Par ElGuevel");

// CONTROLES

if ( argc < 2)
{
printf("\n\n\t Syntaxe : %s <fichier a traiter>\n", argv[0]);
exit(0);
}

if ( (fichier =fopen( argv[1], "r" ) ) == NULL )
{
printf("\n\n\t Erreur : Le fichier '%s' n'a pas pu etre ouvert !\n\n", argv[1] );
exit(0);
}

// MISE EN MEMOIRE DU FICHIER

fTaille = longFichier( fichier );

buffer = (char *) LocalAlloc( LPTR, fTaille + 1 );

memBuffer = buffer; // conserve l'adresse du pointeur de depart pour destruction fiable !

fread( buffer, sizeof(char), fTaille, fichier );

// PARSAGE

trouve = strtok( buffer, ",;" ); // premiere recherche

do
{
printf("\n%s", trouve );

trouve = strtok( NULL, ",;" );
} while( trouve != NULL );

LocalFree ( memBuffer );

printf("\n\n");

}

*****************************

Aller bonne continuation.

désolé si mon code peu paraitre un peu porc pour certain mais j'ai debuter le 'C' y'a 2 mois !
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
Heuuu pour VB .. c vrai que ce langague est lent mais je le pratique aussi, la fonction est plus simple, tu lit ton fichier, et tu le place dans une varaible ou autre comme precedemment genre :

Open fichier for input as #1
do while not EOF(1)
input #1, variable
Loop
Close #1

et ensuit etu a juste a declarer un tableau et a utiliser la fonction Split (n'existe qu'avec VB6 je croit).

Dim Tableau() as string

Tableau = Split ( variable, seprateur) <= heu je croit que c çà j'ai pas la fonction sous les yeux .

Allé @+

Damien
Messages postés
27
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
20 novembre 2006

ben en fait mon fichier fait plus de 1.5 Mo alors pour le stocker pas de souci, mais lorsque je travaille dessus et que je le réécrit dans un fichier, la , ça prends du temps, et j'ai besoin d'en gagner...

merci encore pour ton aide damien, c'est exactement se que j'ai fait dans mon code...

merci encore à tout le monde!

et vive les programmeurs!!!!

damdam04