[PROG] Concaténation

Utilisateur anonyme -  
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 ?
A voir également:

20 réponses

Chacual Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   150
 
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 ...
0
Utilisateur anonyme
 
Ok! Comment je peux différencier, la ligne 1 de la ligne 2 ?
0
Utilisateur anonyme
 
Ouvrir un répertoire, c'est pareil qu'ouvrir un fichier ? Je compte les fichier comment ?
0
Chacual Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   150
 
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Chacual Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   150
 
Je pense que cette page pourrait t'aider :
https://c.developpez.com/faq/?page=Les-fichiers-et-les-dossiers
0
Utilisateur anonyme
 
J'y arrive avec un seul fichier mais pas avec un dossier comportant x fichiers.

Merci de m'aider
0
Chacual Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   150
 
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,".."))))
0
Utilisateur anonyme
 
Je n'ai pas la librairie dirent.h, j'utilise Visual C++.
0
Chacual Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   150
 
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;
0
Utilisateur anonyme
 
Le programme me paraît bon, pourtant Visual C++ ne parvient pas à le compiler, il me met:

fatal error C1083: Cannot open include file: 'windows.h': No such file or directory...


Curieux que Visual C++ ne trouve pas cette librairie...
0
Chacual Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   150
 
C'est peut-être "sys/windows.h" ou une histoire comme ça...
Recherche dans le répertoire où sont tes autres headers.
0
Utilisateur anonyme
 
Toutes les libairies appelés par windows.h manquent également, je comprend pas...
J'essai de les implanté dans le dossier include manuellement.
0
Utilisateur anonyme
 
Je crée une tableau à une seule dimension de 6 caractères donc je fais:

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 ?
0
Chacual Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   150
 
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'.
0
Utilisateur anonyme
 
Ah oui c'est vrai, je l'avais oublié celui-la

Merci
0
Utilisateur anonyme
 
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:

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?
0
Chacual Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   150
 
Pour un saut de ligne Windows, tu dois ajouter \r\n :
echo "Numéro de série _ Mesure _ Cible\r\n">texte.txt
Pour un saut de ligne UNIX, \n uniquement.
0
Utilisateur anonyme
 
Il m'affiche "\r\n" dans le fichier texte qu'il crée.
0
Chacual Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   150
 
Alors essaie ca :
echo "Numéro de série _ Mesure _ Cible">texte.txt
echo "">texte.txt
0
Utilisateur anonyme
 
Il écrase ce que j'ai déjà mis par ""
0
Chacual Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   150
 
Ah pardon :
echo "Numéro de série _ Mesure _ Cible">texte.txt
echo "">>texte.txt
0
Utilisateur anonyme
 
ça fonctionne, le seul problème, c'est qu'il me met des guillemet, cela pourrait posait des problème par la suite...
0
Chacual Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   150
 
Si tu fais :
echo "Numéro de série _ Mesure _ Cible">texte.txt
echo >>texte.txt
0
Utilisateur anonyme
 
Il m'affiche maintenant "Commande ECHO activé"
0
Chacual Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   150
 
echo. >>texte.txt ?????
0
Utilisateur anonyme
 
En fait, un echo fait automatiquement un retour chariot à la fin, le problème est que dès fois j'ai besoin du retour chariot et dès fois non.
Sous Unix, je sais qu'il est possible d'empêcher le fameux retour chariot mais je ne sais pas si c'est possible sous DOS
0
Chacual Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   150
 
Je suis bien meilleur sous UNIX que sous DOS. Je ne pourrai donc pas t'aider plus là-dessus...
0