begin process at 2010 03 22 11:31:17
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > [C / WIN32] LIRE UN FICHIER LIGNE PAR LIGNE

[C / WIN32] LIRE UN FICHIER LIGNE PAR LIGNE


 Information sur la source

Note :
Aucune note
Catégorie :Fichiers / Disque Classé sous :lire, fichier, ligne, File Mapping, ReadLine Niveau :Débutant Date de création :21/10/2007 Date de mise à jour :22/02/2008 00:15:46 Vu / téléchargé :10 172 / 409

Auteur : Neo_Fr

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note


 Description

Fonctions permettant de lire un fichier ligne par ligne facilement et rapidement...
Supporte les fichiers texte creer sous windows, mac ou unix.

LPOPENL __stdcall OpenLine(LPSTR FileName, BYTE FileType);
DWORD __stdcall ReadLine(LPOPENL lpoLine, DWORD nLine, LPSTR LineOut);
void __stdcall CloseLine(LPOPENL lpoLine);
int __stdcall GetTypeOfFile(LPSTR FileName);

Source

  • S'utilise comme suit:
  • LPOPENL lpoLine;
  • lpoLine = OpenLine(Nom_Du_Fichier, Type_Du_Fichier);
  • Si vous connaissez deja le type du fichier remplacer Type_Du_Fichier par une des define suivante:
  • OPENL_WINDOWS_FILE
  • OPENL_UNIX_FILE
  • OPENL_MAC_FILE
  • Sinon Utiliser GetTypeOfFile(Nom_Du_Fichier) qui retournera une des valeurs ci dessus...
  • ReadLine(lpoLine, Numero_de_la_ligne, Buffer_De_Retour);
  • Pour connaitre la taille d'une ligne:
  • ReadLine(lpoLine, Numero_de_la_ligne, 0);
  • et une fois que vous avez fini ne pa oublier d'apeller CloseLine
  • CloseLine(lpoLine);
S'utilise comme suit:

LPOPENL lpoLine;
lpoLine = OpenLine(Nom_Du_Fichier, Type_Du_Fichier);

Si vous connaissez deja le type du fichier remplacer Type_Du_Fichier par une des define suivante:
 OPENL_WINDOWS_FILE
 OPENL_UNIX_FILE
 OPENL_MAC_FILE

Sinon Utiliser GetTypeOfFile(Nom_Du_Fichier) qui retournera une des valeurs ci dessus...

ReadLine(lpoLine, Numero_de_la_ligne, Buffer_De_Retour);

Pour connaitre la taille d'une ligne:
ReadLine(lpoLine, Numero_de_la_ligne, 0);

et une fois que vous avez fini ne pa oublier d'apeller CloseLine
CloseLine(lpoLine);

 Conclusion

Voila..

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

21 octobre 2007 22:49:42 :
maj...
22 octobre 2007 17:09:22 :
Utilisation du File Mapping...
22 février 2008 00:15:47 :
maj..

 Sources du même auteur

Source avec Zip Source avec une capture [C / WIN32] NTCLIB: COMPRESSION PAR API NATIVE
Source avec Zip [C / WIN32] CHANGER DE FOND D'ÉCRAN AVEC IACTIVEDESKTOP
Source avec Zip [C / WIN32] RATLIB - CRYPTER FACILEMENT EN RC4, AES ET TEA
Source avec Zip [C / WIN32] COMPRESSION HUFFMAN
Source avec Zip [C] ALGORITHME BRUTE FORCE

 Sources de la même categorie

Source avec Zip EDITER UN FICHIER BIT PAR BIT par riton91
Source avec Zip Source avec une capture ID3 TAG COVER ALBUM IMAGE par nanonavich
FILEREADER par FrancoisGauthier
Source avec Zip CLASSE AVANCÉE DE LOG, THREAD SAFE ET DIVERSES SURCHARGES par sboli
Source avec Zip Source avec une capture Source .NET (Dotnet) INFILESEEKER par swonder

 Sources en rapport avec celle ci

Source avec Zip EDITER UN FICHIER BIT PAR BIT par riton91
FICHIER ALBUM MUSICAL par imenouuuuuuuuuche
ECRIRE/LIRE UN FICHIER *.INI EN C/C++ par kozy
Source avec Zip CONVERTION DE FICHIER TEXTE DANS UNE BOITE DE DIALOG par elroulianito
ECRIRE/LIRE DANS UN FICHIER INI par LallThis

Commentaires et avis

Commentaire de BruNews le 21/10/2007 20:16:20 administrateur CS

NON et NON, on ne peut pas présenter une source dans cet état.

FileSize = GetFileSize(hFile, 0);
GetFileSize nécessite une vérif d'erreur avec GetLastError
Buffer = (BYTE*) HeapAlloc(...);
Encore vérif du retour NULL obligatoire avant ReadFile(...);

Partout des:
if(condition == v) ...;
if(condition == w) ...;
if(condition == x) ...;
Mettre else if(...), quand c'est blanc c'est pas noir.

HeapAlloc() est fait pour allouer de petits blocs de mémoire, en aucun cas d'immenses blocs pour y mapper un fichier entier.
Tes fonctions ne pourront jamais être utilisées en multi thread pour cause de HEAP_NO_SERIALIZE sur le heap par défaut du processus, c'est à proscrire comme méthode.

Si tout le fichier ne tient pas en mémoire, on fait comment ?

On va conclure par une solution possible:
FileMapping sur le fichier, pousser pointeur pDeb jusque début de la ligne voulue, pousser pEnd partant de pDeb jusque fin de ligne. Alloc de (pEnd - pDeb) octets et y copier les octets.

Commentaire de Neo_Fr le 21/10/2007 21:25:19

Un petit bloc c'est tres vague.. moins de 1mo? - de 10mo? precise stp
Pour le pb avec HEAP_NO_SERIALIZE si je creer un heap avec HeapCreate ca regle le pb?

Neo_Fr

Commentaire de BruNews le 21/10/2007 21:34:04 administrateur CS

Avec heap limité au thread qui s'en servira alors no prob pour HEAP_NO_SERIALIZE.
Par principe, utiliser VirtualAlloc pour blocs >= 4 Mo.

Commentaire de Neo_Fr le 21/10/2007 22:54:01

Je me suis contenter de controler les retours de fonctions..
Pour la lecture du fichier bloc par bloc sa devener trop compliquer et trop risquer..
Si ta d'autre conseilles hesite pas..

Neo_Fr

Commentaire de BruNews le 22/10/2007 00:24:00 administrateur CS

Utilise le FileMapping comme dit plus haut, en balladant un pointeur dedans c'est le systeme qui assurera le chargement par taille de page mémoire à ta place.

Commentaire de Neo_Fr le 22/10/2007 17:13:34

J'ai pas trouver beaucoup d'exemples sur le File Mapping, ca a l'air de marcher mais si je charge un fichier de 80mo ca prend tjrs 80mo en memoire...

Neo_Fr

Commentaire de tibur le 25/10/2007 10:03:42

A possible benefit of memory-mapped files is a "lazy loading", thus using small amounts of RAM even for a very large file. Trying to load the entire contents of a file that is significantly larger than the amount of memory available can cause severe thrashing as the operating system reads from disk into memory and simultaneously pages from memory back to disk. Not only memory-mapping may bypass the page file completely, but the system only needs to load the smaller page-sized sections as data is being edited, similarly to demand paging scheme used for programs.
[http://en.wikipedia.org/wiki/Memory-mapped_file]

En gros, ça veut dire que quand tu veux faire une édition dans une partie de ton fichier mappé, l'OS va charger en mémoire un bout du fichier (1k,4k ? taille des pages ?). Si tu fais une écriture, il va ensuite la répercuter sur le fichier. Mais en aucun cas il y a une correspondance directe entre mémoire utilisée par le programme et la taille du fichier. (Encore que pour un petit fichier, genre 80Mo, ya tout de même des chances qu'il soit entierement en mémoire!)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Lire un fichier Texte Ligne par ligne [ par Ricpperso ] Bonjour,bon je fai un pti proget je voudrai savoir comment on fais pour lire un fichier Texte ligne par ligne, avec si possible le Cfile.merci d'avanc Lire une ligne d'un fichier texte [ par CassusGreg ] Salut à tous,Est-ce-qu'il existe une fonction pour lire une ligne de texte (terminé par 0x0D 0x0A) dans un fichier?Je suis sous VC++ 6merci Lire dans un fichier ligne par ligne [ par curator68 ] Voilà, j'ai un fichier sur mon disque, et j'aimerai lire le contenu ligne par ligne dans mon programme. J'utilise Visual C++ de Visual Studio 6.0 sp5. Lire dans un fichier [ par Psyc0s ] J'ai un fichier dans lequel je stock des log donc il n'a jamais le meme nombre de ligne. J'aurais besoin de mettre chacque ligne dans une variable(di lire un fichier txt ligne par ligne [ par lapinrose67 ] Bonsoir,Je developpe un logiciel en C sous Linux, voila mon problème:Je dois lire un fichier texte ligne par ligne et placer chacune d'entre ellesdans lire fichier ligne par ligne [ par mat74 ] salut a ts je voudrai savoir comment je pourrai lire un fichier lignes par lignes . par exemple une fonction qui me permerttrai de recuperer la ligne Lire une ligne dans un fichier [ par StevenJLMunn ] J'ai besoin d'une fonction qui lit juste une ligne dans un fichier text.J'utilise Visual C++ c'est une win32 consol application.Ca fait pas très longt lire une ligne dans un fichier texte puis........ [ par oudkaramla ] salut out le monde,je veux lire 3 lignes d'un fichier texte, puis faire le découpage de chaque ligne en petits morceauxje sais qu'il ft faire fopen() lecture fichier C++ [ par biscot19 ] bonjour, je voudrais savoir comment faire pour lire un fichier ligne par ligne par exemple je demande a mon prog de lire la 3eme ligne il doit me reto Lire données dans un fichier Excel en C [ par skrime ] Bonjour, J'aimerais lire les données contenues dans un fichier excel, j'aimerais pouvoir lire ligne par ligne, je ne sais pas du tout comment on


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
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,172 sec (4)

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