begin process at 2012 05 30 10:17:28
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

traitement simultannée sur des fichiers


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

traitement simultannée sur des fichiers

vendredi 2 octobre 2009 à 10:14:14 | traitement simultannée sur des fichiers

boualiasma

Bonjour,

Je voulais faire un traitement en même temps sur un nombre de fichier.J'ai trouvé des difficultés pour résoudre ce problème.

Je vous explique ma demande :
J'ai un fichier nommé "resultat.txt" contenanat deux champs de type chaine de caractère: numero et son attribut.
Soit le fichier "resultat.txt":

5 : dd cc aaa
8 : aaa bb dd
10 : bb cc aaa
4 : dd bb cc




Chaque mot formant le deuxième champ(attribut) présente le nom d'un fichier texte.
Dans notre exemple on a les fichiers textes suivants:
"dd.txt", "cc.txt", "aaa.txt" et "bb.txt".
On peut avoir plus ou moins de ces fichiers textes car ceci dépend des mots formant le deuxième champ (attribut).
Le contenu de ces fichiers existent et ils sont générés dans mon programme. chacun de ces fichiers est formant de deux champs: valeur(de type entier) et degree(de type réel).

Dans cet exemple, on a le contenu :
- de fichier "dd.txt" :

257 0.860000
233 1.000000
144 0.880000
377 0.000000
257 0.860000
562 0.000000
456 0.000000
388 0.660000
644 0.000000
277 0.460000




- de fichier "cc.txt" :

160 1.000000
155 1.000000
160 1.000000
155 1.000000
175 0.000000
185 0.000000
170 0.000000
175 0.000000
174 0.000000
163 0.400000




- de fichier "aaa.txt" :

30 1.000000
32 1.000000
45 1.000000
56 1.000000
46 0.860000
48 0.000000
34 0.000000
38 0.500000
59 0.660000
30 0.000000




- de fichier "bb.txt" :

257 0.860000
233 1.000000
144 0.880000
377 0.000000
257 0.860000
562 0.000000
456 0.000000
388 0.660000
644 0.000000
277 0.460000





Je voulais pour chaque numero (premier champ de fichier "resultat.txt") positionner sur la même ligne numéro 'numero' pour chaque fichier txt correspondant et calculer le minimum entre ces valeurs de 'degree'
par exemple pour le numero 10 de fichier "resultat.txt" nous allons positionner sur la ligne numéro 10 en même temps pour tous les fichiers correspondant à ce numéro.
Pour cet exemple, on va positionner sur la ligne numéro 5 du fichiers "cc.txt", "aaa.txt" et "bb.txt"
puis on cherche le minimum entre les valeurs de 'degree'
Dans notre exemple, on cherche le minimum entre
0.400000 et 0.000000 et 0.460000

Donc on a le minimum est 0.4000000

Et donc on souhaite obtenir le résultat final qui va être stocker dans un fichier nommée "resultat_final" est :

5 : dd cc aaa : 0.50
8 : aaa bb dd : 0.50
10 : bb cc aaa : 0.40
4 : dd bb cc : 1.00




Que proposez vous ?

Merci.
vendredi 2 octobre 2009 à 15:18:13 | Re : traitement simultannée sur des fichiers

DeAtHCrAsH

Salut Asma,

Ton exemple n'est pas claire.

1ere chose : Tu dis prendre la ligne numéro 10, puis la numéro 5 mais les valeurs indiquées ne correspondent pas. Si j'ai bien compris et que je prend la ligne numéro 5 des fichiers dd, cc et aaa j'obtiens :
- 5ieme ligne de dd : 0.860000
- 5ieme ligne de cc : 0.000000
- 5ieme ligne de aaa : 0.860000

Le minimum est donc 0.000000.

2ieme chose : 0.400000 et 0.000000 et 0.460000 => chez moi le minimum c'est 0.000000 et non pas 0.400000 comme tu l'indique dans ton exemple.

Bref, si j'ai bien compris ton problème, la solution n'est pas bien compliqué en place.
Dans un premier temps essaye de mieux nous expliquer ton besoin et de le corriger si necessaire, ensuite nous serons en mesure de mieux t'aider.

Shell
vendredi 2 octobre 2009 à 20:29:45 | Re : traitement simultannée sur des fichiers

boualiasma


Pardon, C'est faute de frappe.

Oui tu est raison.
lundi 5 octobre 2009 à 09:51:41 | Re : traitement simultannée sur des fichiers

boualiasma

Bonjour,

Je vous explique ma demande :
J'ai un fichier nommé "resultat.txt" contenant deux champs de type chaine de caractère: numero et son attribut.
Soit le fichier "resultat.txt":

5 : dd cc aaa
8 : aaa bb dd
10 : bb cc aaa
4 : dd bb cc




Chaque mot formant le deuxième champ(attribut) présente le nom d'un fichier texte.
Dans notre exemple on a les fichiers textes suivants:
"dd.txt", "cc.txt", "aaa.txt" et "bb.txt".
On peut avoir plus ou moins de ces fichiers textes car ceci dépend des mots formant le deuxième champ (attribut).
Le contenu de ces fichiers existent et ils sont générés dans mon programme. chacun de ces fichiers est formant de deux champs: valeur(de type entier) et degree(de type réel).

Dans cet exemple, on a le contenu :
- de fichier "dd.txt" :

257 0.860000
233 1.000000
144 0.880000
377 0.000000
257 0.860000
562 0.000000
456 0.000000
388 0.660000
644 0.000000
277 0.460000



- de fichier "cc.txt" :

160 1.000000
155 1.000000
160 1.000000
155 1.000000
175 0.000000
185 0.000000
170 0.000000
175 0.000000
174 0.000000
163 0.400000



- de fichier "aaa.txt" :

30 1.000000
32 1.000000
45 1.000000
56 1.000000
46 0.860000
48 0.000000
34 0.000000
38 0.500000
59 0.660000
30 0.000000




- de fichier "bb.txt" :

257 0.860000
233 1.000000
144 0.880000
377 0.000000
257 0.860000
562 0.000000
456 0.000000
388 0.660000
644 0.000000
277 0.460000



Je voulais pour chaque numero (premier champ de fichier "resultat.txt") positionner sur la même ligne numéro 'numero' pour chaque fichier txt correspondant et calculer le minimum entre ces valeurs de 'degree'
ppar exemple pour le numero 10 de fichier "resultat.txt" nous allons positionner sur la ligne numéro 10 en même temps pour tous les fichiers correspondant à ce numéro.
Pour cet exemple, on va positionner sur la ligne numéro 10 du fichiers "cc.txt", "aaa.txt" et "bb.txt"
puis on cherche le minimum entre les valeurs de 'degree'
Dans notre exemple, on cherche le minimum entre
0.400000 et 0.000000 et 0.460000

Donc on a le minimum est 0.000000

Et donc on souhaite obtenir le résultat final qui va être stocker dans un fichier nommée "resultat_final" est :

5 : dd cc aaa : 0.00
8 : aaa bb dd : 0.00
10 : bb cc aaa : 0.00
4 : dd bb cc : 0.00



Je n'oublierai pas vos aides car la solution de ma dernière demande signifie fin de mon travail.

Je souhaite que vous acceptez cette demande et me répondez.

Que proposez vous ?

Merci.
mercredi 7 octobre 2009 à 17:25:03 | Re : traitement simultannée sur des fichiers

boualiasma

Bonjour,

J'ai trouvé des difficultés au début pour extraire le premier champ et les différents mots de deuxième champ de fichier "resultat.txt" .

Que proposez vous comme solution?

Merci.
mercredi 7 octobre 2009 à 21:07:53 | Re : traitement simultannée sur des fichiers

DeAtHCrAsH

Salut Asma,

Désolé de ne répondre que maintenant.
Si tu regardes dans mes codes sources tu devrais y trouver quelques chose de similaire a ce que tu souhaites faires.

Si j'ai un peu de temps ce soir je te ferai un petit exemple sur mesure pour t'aider à comprendre.
L'idée est d'utiliser la fonction strtok(...) pour extraire les différentes valeurs de tes fichiers.

Shell
dimanche 11 octobre 2009 à 20:40:25 | Re : traitement simultannée sur des fichiers

boualiasma

Bonsoir,

Je serais très contente si vous m'aidez.

Merci.
mercredi 14 octobre 2009 à 08:04:22 | Re : traitement simultannée sur des fichiers

boualiasma

Bonjour,

J'ai besoin de votre solution concernant ma demande car je dois l'utiliser dans mon programme.

Merci.
jeudi 15 octobre 2009 à 18:34:48 | Re : traitement simultannée sur des fichiers

boualiasma

Bonjour,

Voici mon essai concernant ma dernière demande:

Code C/C++ :
#include <stdlib.h>
#include <stdio.h>

int readInt(FILE* fp, int *ret)
{
	int i;
	char sBuffer[32];
	for (i=0;i<8;i++)
	{
		sBuffer[i] = fgetc(fp);
		if (sBuffer[i]==32)
		{
			sBuffer[i] = 0;
			*ret = strtol(sBuffer, NULL, 0);
			return 0;
		}
	}

	*ret = 0;
	return -1;
}

double LireDegree(int nLineNumber, char* sFileName)
{
	char sBuffer[32];
	FILE* fp;
	int i=0;

	if (fp = fopen(sFileName, "r")) {
		while(--nLineNumber)
			while (!feof(fp) && fgetc(fp)!=10);
		while (fgetc(fp)!=32);
		while(!feof(fp)) {
			sBuffer[i] = fgetc(fp);
			if (sBuffer[i]==32 || sBuffer[i]==13)
				break;
			i++;
		}
		sBuffer[i] = 0;
		fclose(fp);
		return strtod(sBuffer, NULL);
	}
	return 0.0;
}

int main()
{
	char sBuffer[32];
	FILE *fp, *fp_final;
	int nLineNumber, i;
	double nCurDegree, nMinDegree = 0.0;
	int bFirst=1;
	int bBreak = 0;

	fp = fopen("resultat.txt", "r");
	fp_final = fopen("resultat_final.txt", "w");
	while (!readInt(fp, &nLineNumber)) {
		fprintf(fp_final, "%d :", nLineNumber);
		fgetc(fp);
		i=0;
		while(!feof(fp)) {
			sBuffer[i]=fgetc(fp);
			if (sBuffer[0]==10)
				break;
			else if (sBuffer[i]==10 || sBuffer[i]==32 && i!=0) {
				bBreak = (sBuffer[i]==10);
				
				sBuffer[i] = 0;
				fprintf(fp_final, " %s", sBuffer);

				sBuffer[i++] = '.';
				sBuffer[i++] = 't';
				sBuffer[i++] = 'x';
				sBuffer[i++] = 't';
				sBuffer[i] = '\0';

				nCurDegree = LireDegree(nLineNumber, sBuffer);
				if (nMinDegree>nCurDegree || bFirst) 
				{
					bFirst = 0;
					nMinDegree = nCurDegree;
				}
				i=0;
				if (bBreak)
					break;
			}
			else if (sBuffer[0]!=32)
				i++;
		}
		fprintf(fp_final, " : %f\n", nMinDegree);
		bFirst = 1;
	}
	fclose(fp);
	fclose(fp_final);

	system("type resultat_final.txt");
	system("pause");
}



Tout d'abord cette solution donne:


5 : dd cc aaa : 0.000000
8 : aaa bb dd : 0.500000
10 : bb cc aaa : 0.000000
4 : dd bb : 0.000000




Cette résultat obtenue si les différents fichiers ("aaa.txt", "bb.txt", "cc.txt", "dd.txt")textes décrites au dessus ils ont un seul espace entre les deux champs formant chaque fichier.

Mais le résultat souhaité est :

5 : dd cc aaa : 0.00
8 : aaa bb dd : 0.50
10 : bb cc aaa : 0.00
4 : dd bb cc : 0.00





Dans cette résultat, on obtient:

4 : dd bb





Mais elle me manque 'cc'
Or on doit obtenir:

4 : dd bb cc





Or si les différents fichiers ("aaa.txt", "bb.txt", "cc.txt", "dd.txt")textes décrites au dessus ils ont plusieurs espaces pas un seul espace entre les deux champs formant chaque fichier alors je n'obtiens le bon résultat puisque tous les minimum sont égales à 0.000000

Quelles sont les modifications à faire dans cette solution ?


car pour les différents fichiers ("aaa.txt", "bb.txt", "cc.txt", "dd.txt")textes décrites au dessus ils ont plusieurs espaces pas un seul espace entre les deux champs formant chaque fichier. De plus ces fichiers sont générés automatiquement dans le programme.
En réalité, je fais
fprintf(fp,"%10d%s\n",champ1,champ2)
Je dois travailler avec ce format.

Merci.
lundi 19 octobre 2009 à 09:44:29 | Re : traitement simultannée sur des fichiers

boualiasma

Bonjour,


Merci.Bonjour,

Je suis bloquée à ce niveau. La solution à la dernière demande me manque pour l'intégrer dans mon projet final.
S'il vous plait, qu'est ce qu'il manque cette solution pour répondre à la dernière demande ?

Pouvez vous proposez autre solution loin de mon code ?

Je tiens compte pour vos aides et je n'oublierai pas vos efforts.

Merci.


Cette discussion est classée dans : fichier, txt, quote, aaa, cc


Répondre à ce message

Sujets en rapport avec ce message

union de deux fichiers [ par boualiasma ] Bonjour, Je voulais ajouter autres lignes (autres données) à la fin du fichier 'output.txt' à partir d'un autre fichier 'exp.txt' le contenu de fich copier résultat variable dans fichier TXT [ par pancratee ] Salut tout le monde, Je souhaite afficher et mettre en forme le résultat de mon programme à savoir les variables dans un fichier txt. J'ai tenté que remplir une chaine par des lignes d'un fichier [ par boualiasma ] Bonjour, Je voulais remplir une chaine 's' par des lignes des fichiers. par exemple si on a le fichiers "test.txt": aaa [quote]cc bbbbb deee[/quote] Lecture dans un fichier texte [ par Hyperpenguin ] Bonjour, J'ai un problème avec une fonction qui doit me servir à lire des infos dans un fichier de configuration pour une application que je dévelop changer le continu d'une ligne d'un fichier txt [ par esprit1983 ] Salut, J'ai réalisé cette classe matiere qui permet de: -saisir un objet de type matiere qui contient un champ (nom) de type string et un champ(cof) ouverture d'un gros fichier txt ( taille > 3Mo) [ par malouve ] Bonjour, J'ai a traité des fichiers txt de valeurs dont je ne connais pas le nombre d'elements mais qui font plus de 3Mo. J'ai essayé la fonction fre gestion d'un fichier.txt en C++ [ par moberol ] Bonjour à tous! je debute en C++,le problème c'est que je voudrai lire un fichier texte dans sa totalité...en meme temps compter le nombre  "d'un mot" pb de chargement d'un fichier txt dans un tableau [ par malouve ] Bonjour, j'ai un problème bloquant dans mon projet et j'ai désespérement besoin d'un coup de main [^^sad2] j'ai fait un traitement sur un fichier de b ecrire fichier txt avec ofstream [ par MiharbiDoNo ] bonjour, je suis encore debutant en c++, je veux juste savoir commment ecrire des lignes de texte dans un ficher txt. j'ai vu des tuto mais j'ai pas a ecriture d'un txt dans le même dossier [ par MiharbiDoNo ] j'essai d'ecrire un fichier txt a l'aide de [code=cpp]ofstream myfile; myfile.open ("exemple.txt");[/code] le probleme c'est l'emplacement du fichier


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales