[PROG] Concaténation
Fermé
Utilisateur anonyme
-
29 août 2007 à 10:37
Chacual Messages postés 230 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 15 octobre 2007 - 30 août 2007 à 11:53
Chacual Messages postés 230 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 15 octobre 2007 - 30 août 2007 à 11:53
A voir également:
- [PROG] Concaténation
- Concaténation matlab - Astuces et Solutions
- Robot prog - Télécharger - Édition & Programmation
- Mysql concatenation ✓ - Forum Webmastering
- Concaténation pdf - Guide
- Excel concatenation - Guide
20 réponses
Chacual
Messages postés
230
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
15 octobre 2007
149
29 août 2007 à 10:44
29 août 2007 à 10:44
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 ...
Chacual
Messages postés
230
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
15 octobre 2007
149
29 août 2007 à 11:30
29 août 2007 à 11:30
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
Chacual
Messages postés
230
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
15 octobre 2007
149
29 août 2007 à 11:37
29 août 2007 à 11:37
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
Chacual
Messages postés
230
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
15 octobre 2007
149
29 août 2007 à 16:01
29 août 2007 à 16:01
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,".."))))
Chacual
Messages postés
230
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
15 octobre 2007
149
29 août 2007 à 16:09
29 août 2007 à 16:09
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...
Chacual
Messages postés
230
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
15 octobre 2007
149
29 août 2007 à 16:18
29 août 2007 à 16:18
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 ?
Chacual
Messages postés
230
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
15 octobre 2007
149
30 août 2007 à 10:39
30 août 2007 à 10:39
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?
Chacual
Messages postés
230
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
15 octobre 2007
149
30 août 2007 à 11:09
30 août 2007 à 11:09
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.
echo "Numéro de série _ Mesure _ Cible\r\n">texte.txt
Pour un saut de ligne UNIX, \n uniquement.
Il m'affiche "\r\n" dans le fichier texte qu'il crée.
Chacual
Messages postés
230
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
15 octobre 2007
149
30 août 2007 à 11:15
30 août 2007 à 11:15
Alors essaie ca :
echo "Numéro de série _ Mesure _ Cible">texte.txt
echo "">texte.txt
echo "Numéro de série _ Mesure _ Cible">texte.txt
echo "">texte.txt
Il écrase ce que j'ai déjà mis par ""
Chacual
Messages postés
230
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
15 octobre 2007
149
30 août 2007 à 11:17
30 août 2007 à 11:17
Ah pardon :
echo "Numéro de série _ Mesure _ Cible">texte.txt
echo "">>texte.txt
echo "Numéro de série _ Mesure _ Cible">texte.txt
echo "">>texte.txt
ça fonctionne, le seul problème, c'est qu'il me met des guillemet, cela pourrait posait des problème par la suite...
Chacual
Messages postés
230
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
15 octobre 2007
149
30 août 2007 à 11:22
30 août 2007 à 11:22
Si tu fais :
echo "Numéro de série _ Mesure _ Cible">texte.txt
echo >>texte.txt
echo "Numéro de série _ Mesure _ Cible">texte.txt
echo >>texte.txt
Il m'affiche maintenant "Commande ECHO activé"
Chacual
Messages postés
230
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
15 octobre 2007
149
30 août 2007 à 11:29
30 août 2007 à 11:29
echo. >>texte.txt ?????
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
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
Chacual
Messages postés
230
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
15 octobre 2007
149
30 août 2007 à 11:53
30 août 2007 à 11:53
Je suis bien meilleur sous UNIX que sous DOS. Je ne pourrai donc pas t'aider plus là-dessus...