begin process at 2012 05 30 16:29:49
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

remplir une chaine par des lignes d'un fichier


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

remplir une chaine par des lignes d'un fichier

dimanche 11 octobre 2009 à 17:56:52 | remplir une chaine par des lignes d'un fichier

boualiasma

Bonjour,

Je voulais remplir une chaine 's' par des lignes des fichiers.
par exemple si on a le fichiers "test.txt":

aaa

cc
bbbbb
deee



Il aura un espace entre chaque mot dans la chaine 's'.

le résultat souhaité est d'afficher la chaine 's'
'aaa cc bbbbb deee'

Voici mon essai:

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

int main(void)
{
	char *s = null;
	int i = 0, cpt = 0;
	char c;
	file *fp = fopen("test.txt","r");
	rewind(fp);
	while((c=fgetc(fp)) != eof)
		cpt++;
	s = malloc(sizeof(char) * (cpt+1));
	rewind(fp);
	while((c=fgetc(fp)) != eof) {
		if(c == '\n') 
			s[i++] = ' '; 
		else 
			s[i++] = c;
	}
	fclose(fp);
	s[i] = '\0';
	printf("le resultat est : %s\n",s);
	free(s);
	return 0;
}


Ce code m'affiche :

<citation>le resultat est :aaa cc bbbbb deee2222</citation>

Mais le résultat souhaité est :
<citation>le resultat est :aaa cc bbbbb deee</citation>

Je ne sais pas comment viennent ces quatre 2 ?

Je crois que chaque chaine de caractère a une marque de fin '\0'.
Quelle est la modification à ajouter ?

De plus on peut optimiser cette solution car on fait deux fois le parcours de fichier. ceci sera couteux si on a fichier avec de centaines lignes. Que pensez vous ?

lorsque on fait une déclaration statique d'une chaine de caractère.
Donc quelle est la taille maximale de chaine à atteindre ?

Dans le cas de déclaration dynamique pas de problème ?
dimanche 11 octobre 2009 à 23:47:37 | Re : remplir une chaine par des lignes d'un fichier

ed73

Bonjour,

Pour connaître la taille du fichier sans le parcourir :

file *fp = fopen("test.txt","r");
fseek(fp,0L,SEEK_END);
cpt = ftell(fp);
fseek(fp,0L,SEEK_SET); // ou bien rewind(fp);

Pour les 2222, je ne vois pas.

lundi 12 octobre 2009 à 07:54:53 | Re : remplir une chaine par des lignes d'un fichier

boualiasma

Merci beaucoup.

J'ai une autre demande.
Je serais très contente à m'aider.

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.
lundi 12 octobre 2009 à 08:31:16 | Re : remplir une chaine par des lignes d'un fichier

fregolo52

Membre Club
pour les 2222 je ne vois qu'une chose : mémoire non initialisée.
fait un memset après le malloc.
lundi 12 octobre 2009 à 23:16:21 | Re : remplir une chaine par des lignes d'un fichier

boualiasma

Bonjour,

Comment définir et utiliser 'memset' dans mon programme ?
quelles sont les modifications à faire ?

Merci.


Cette discussion est classée dans : fichier, chaine, lignes, fp, aaa


Répondre à ce message

Sujets en rapport avec ce message

Convertion String char* [ par CerberusAbaka ] Bonjour;   Je développe avec Dev C++ un petit exécutable qui converti des PostScript couleur en noir et blanc, tout marche pas trop mal mais j'ait un aide traitement du fichier [ par boualiasma ] J'ai un fichier qui se compose de deux champs : - numero présenté par un entier - attribut présenté par une chaine caractère. On a la même taille po 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 ouverture de fichier + chaine de caractère [ par igor75 ] bonsoir, j'ai pas trouvé sur le forum donc voila ma question avec un ptit code explicatif :#include.......int main(){char chemin[32];FILE *fichier;cou ouverture d'un fichier txt sur visualC++ [ par drcmomo ] Bonjour s'il vous plait aidez moi je dois ouvrir un fichier txt sur visual mon programme n'arrive pas a ouvrir le fichier. <SPAN style="F ECRITURE FICHIER LOGFONT [ par lectpe ] Bonjourdans mon application, j'utilise un fenêtre de dialogue de sélection de police d'écriture :VOID SelectMainFont(HWND hwnd, HWND hRichEdit){   Zer traitement d'un fichier [ par boualiasma ] Salut,J'ai un fichier texte bien formé contient deux champs: objet et attribut.tous les objets sont des entiers et tous les attributs sont de chaines position d'une chaine de caractére dans un fichier ecriture et lecture [ par yanlou ] salut, bon voila je veux mettre les chaine de caractére d'un fichier dans un autre fichier, j'utilise le code suivant :#include #include #include # Récuper un mot dans un fichier [ par thegame88 ] Bonjour à tous,Je suis entrain de développer un pti prog je voudrais que ce prog me permette de récupérer les 16 derniers caractères d'un fichier.Ce f récuperer des données numérique dans fichiers [ par snakers07 ] bonjour, j'essaye de réaliser un chargement de fichier, pour cela je dois parcourir le tableau afin d'en soutirer que les informations numériques c'es


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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 : 1,342 sec (3)

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