[PROG] Concaténation
Utilisateur anonyme
-
Chacual Messages postés 230 Date d'inscription Statut Membre Dernière intervention -
Chacual Messages postés 230 Date d'inscription Statut Membre Dernière intervention -
Bonjour
J'ai dans un dossier x fichiers .txt comprenant tous la même première ligne puis une seconde ligne de valeurs propre à chaque fichier.
J'aimerai concaténer automatiquement tous ses fichiers dans un seul... seulement j'aimerai que la première ligne de ses fichiers ne soient pas répétée à chaque fois mais qu'une seule fois.
Je peux soit le faire en DOS soit en langage C...
Es-ce possible ? Comment puis-je faire ?
J'ai dans un dossier x fichiers .txt comprenant tous la même première ligne puis une seconde ligne de valeurs propre à chaque fichier.
J'aimerai concaténer automatiquement tous ses fichiers dans un seul... seulement j'aimerai que la première ligne de ses fichiers ne soient pas répétée à chaque fois mais qu'une seule fois.
Je peux soit le faire en DOS soit en langage C...
Es-ce possible ? Comment puis-je faire ?
A voir également:
- [PROG] Concaténation
- Robot prog - Télécharger - Édition & Programmation
- Concaténation pdf - Guide
- Clear prog - Télécharger - Sécurité
- Prog dvb - Télécharger - Télévision
- Concaténation php ✓ - Forum PHP
20 réponses
Je pense que c'est plus simple en C qu'en shell DOS.
L'algorithme sera le suivant :
Ouvrir le fichier résultat
Pour chaque fichier contenu dans le dossier faire
Ouvrir le fichier
Lire la prmière ligne
Lire la deuxième ligne
Ecrire la ligne lue dans le fichier résultat
Fermer le fichier
Fin pour
Pour coder ça, tu pourras utiliser les fonctions C standard : fopen, fclose, fputs, fgets.
J'espère simplement pour toi que les fichiers ont une structure fixe ou peu variable ; ce sera plus simple à coder !
Bon courage ...
L'algorithme sera le suivant :
Ouvrir le fichier résultat
Pour chaque fichier contenu dans le dossier faire
Ouvrir le fichier
Lire la prmière ligne
Lire la deuxième ligne
Ecrire la ligne lue dans le fichier résultat
Fermer le fichier
Fin pour
Pour coder ça, tu pourras utiliser les fonctions C standard : fopen, fclose, fputs, fgets.
J'espère simplement pour toi que les fichiers ont une structure fixe ou peu variable ; ce sera plus simple à coder !
Bon courage ...
Le plus simple serait de connaître exéctement le nombre de caractères de la ligne 1.
Quand tu fais fopen, tu es placé au début du fichier. Quand tu fais fgets, tu indiques le nombre de caractères à lire. Il faut donc savoir combien de caractères composent ta ligne.
Si cette taille est variable, tu devras faire une bidouille pour lire les caractères un à un et détecter le caractère de fin de ligne.
Une fois le saut de ligne détecté, tu n'auras plus qu'à récupérer tout ce qui est après.
As-tu une description des fonctions C relatives aux fichiers ? Sinon tout est là :
http://cermics.enpc.fr/~ts/C/FUNCTIONS/function.ref.html
Quand tu fais fopen, tu es placé au début du fichier. Quand tu fais fgets, tu indiques le nombre de caractères à lire. Il faut donc savoir combien de caractères composent ta ligne.
Si cette taille est variable, tu devras faire une bidouille pour lire les caractères un à un et détecter le caractère de fin de ligne.
Une fois le saut de ligne détecté, tu n'auras plus qu'à récupérer tout ce qui est après.
As-tu une description des fonctions C relatives aux fichiers ? Sinon tout est là :
http://cermics.enpc.fr/~ts/C/FUNCTIONS/function.ref.html
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je pense que cette page pourrait t'aider :
https://c.developpez.com/faq/?page=Les-fichiers-et-les-dossiers
https://c.developpez.com/faq/?page=Les-fichiers-et-les-dossiers
J'ai trouvé ce bout de code ; il peut t'inspirer !
> #include <stdio.h>
> #include <dirent.h>
> #include <sys/types.h>
> #include <stdlib.h>
#include <strings.h>
> int nivo;
> void execute(char *fichier)
> {
> printf("voila ton fichier :%s ki se situe au nivo:%d\n",fichier,nivo);
> }
>
> void afficheContenu(char * repertoire)
> {
>
> DIR *dir;
> struct dirent *courant;
> char *filePath;
> dir=opendir(repertoire);
> if(dir==NULL)
> return;
>
> printf("***************************************************\n");
> printf("je rentre dans le repertoire:%s\n",repertoire);
> while((courant=readdir(dir)) != NULL )
> {
> filePath=(char *)malloc(strlen(repertoire)+strlen(courant->d_name)+1);
> sprintf(filePath,"%s%c%s",repertoire,'/',courant->d_name);
> if(courant->d_type==4 && ( (strcmp(courant->d_name,".")) && (strcmp(courant->d_name,".."))))
> #include <stdio.h>
> #include <dirent.h>
> #include <sys/types.h>
> #include <stdlib.h>
#include <strings.h>
> int nivo;
> void execute(char *fichier)
> {
> printf("voila ton fichier :%s ki se situe au nivo:%d\n",fichier,nivo);
> }
>
> void afficheContenu(char * repertoire)
> {
>
> DIR *dir;
> struct dirent *courant;
> char *filePath;
> dir=opendir(repertoire);
> if(dir==NULL)
> return;
>
> printf("***************************************************\n");
> printf("je rentre dans le repertoire:%s\n",repertoire);
> while((courant=readdir(dir)) != NULL )
> {
> filePath=(char *)malloc(strlen(repertoire)+strlen(courant->d_name)+1);
> sprintf(filePath,"%s%c%s",repertoire,'/',courant->d_name);
> if(courant->d_type==4 && ( (strcmp(courant->d_name,".")) && (strcmp(courant->d_name,".."))))
Allons y à la sauce Windows alors !
#include <windows.h>
WIN32_FIND_DATA File;
HANDLE hSearch;
BOOL re;
hSearch=FindFirstFile("*.*", &File);
if(hSearch == INVALID_HANDLE_VALUE)
{
return FALSE;
}
re=TRUE;
do
{
/* Traitement */
re = FindNextFile(hSearch, &File);
} while(re);
FindClose(hSearch);
return TRUE;
#include <windows.h>
WIN32_FIND_DATA File;
HANDLE hSearch;
BOOL re;
hSearch=FindFirstFile("*.*", &File);
if(hSearch == INVALID_HANDLE_VALUE)
{
return FALSE;
}
re=TRUE;
do
{
/* Traitement */
re = FindNextFile(hSearch, &File);
} while(re);
FindClose(hSearch);
return TRUE;
Le programme me paraît bon, pourtant Visual C++ ne parvient pas à le compiler, il me met:
Curieux que Visual C++ ne trouve pas cette librairie...
fatal error C1083: Cannot open include file: 'windows.h': No such file or directory...
Curieux que Visual C++ ne trouve pas cette librairie...
C'est peut-être "sys/windows.h" ou une histoire comme ça...
Recherche dans le répertoire où sont tes autres headers.
Recherche dans le répertoire où sont tes autres headers.
Toutes les libairies appelés par windows.h manquent également, je comprend pas...
J'essai de les implanté dans le dossier include manuellement.
J'essai de les implanté dans le dossier include manuellement.
Je crée une tableau à une seule dimension de 6 caractères donc je fais:
J'entre à l'intérieur 6 caractères venant d'un fichier texte avec les commandes fgets et fputs...
J'obtiens un tableau à une dimension de 17 caractères...
Sachant que les 6 premières valeurs sont corrects et à la fin il met des I avec accent grave suivi d'un petit carré....
Pourquoi mon tableau s'allonge ?
char ligne2[6];
J'entre à l'intérieur 6 caractères venant d'un fichier texte avec les commandes fgets et fputs...
J'obtiens un tableau à une dimension de 17 caractères...
Sachant que les 6 premières valeurs sont corrects et à la fin il met des I avec accent grave suivi d'un petit carré....
Pourquoi mon tableau s'allonge ?
Bienvenue dans les grandes joies du C !!
Si tu ne mets pas de caractère '\0' à la fin de ta chaîne de caractères, lorsque tu la lis, toutes les données du segment mémoire sont lues jusqu'au prochain '\0'.
Si tu veux pouvoir mettre 6 caractères dans ta chaîne, tu dois la définir sur 7 et renseigner ligne2[6] avec '\0'.
Si tu ne mets pas de caractère '\0' à la fin de ta chaîne de caractères, lorsque tu la lis, toutes les données du segment mémoire sont lues jusqu'au prochain '\0'.
Si tu veux pouvoir mettre 6 caractères dans ta chaîne, tu dois la définir sur 7 et renseigner ligne2[6] avec '\0'.
Merci pour tout ce que tu as déjà fait. Désolé de te déranger mais j'ai une autre question:
J'ai utilisé la commande Dos suivante pour générer un fichier texte:
Les underscore représente une tabulation (mais là n'est pas le problème)...
Je dois faire un saut de ligne après Cible... Comment puis-je m'y prendre?
J'ai utilisé la commande Dos suivante pour générer un fichier texte:
echo "Numéro de série _ Mesure _ Cible">texte.txt
Les underscore représente une tabulation (mais là n'est pas le problème)...
Je dois faire un saut de ligne après Cible... Comment puis-je m'y prendre?
ça fonctionne, le seul problème, c'est qu'il me met des guillemet, cela pourrait posait des problème par la suite...