Ifstream, getline

Messages postés
42
Date d'inscription
mardi 19 avril 2011
Statut
Membre
Dernière intervention
24 juin 2011
- - Dernière réponse : johnASP
Messages postés
42
Date d'inscription
mardi 19 avril 2011
Statut
Membre
Dernière intervention
24 juin 2011
- 9 juin 2011 à 12:10
Bonjour à tous!

J'ai besoin d'un programme pour compter le nombre de ligne qu'il y a dans un fichier txt pour pouvoir traiter ensuite les informations qui y sont contenu jusqu'à la fin de mon fichier.
J'ai trouvé se petit morceau de programme mais quand je le compile il me donne des erreurs que je n'arrive pas à résoudre.


ifstream file(chemin);
// compter le nombre de lignes
int count = 0;

String^ line;
while ( getline( file, line ) )
{
++count;
}


ERREURS :

1>.\database.cpp(48) : error C2065: 'ifstream' : identificateur non déclaré
1>.\database.cpp(48) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'file'
1>.\database.cpp(48) : error C3861: 'file' : identificateur introuvable
1>.\database.cpp(53) : error C3861: 'getline' : identificateur introuvable

Merci d'avance pour votre aide.
Afficher la suite 

16 réponses

Messages postés
14656
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
13 novembre 2019
90
0
Merci
Hello,
As-tu rajouté les bons includes?
#include

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
Messages postés
42
Date d'inscription
mardi 19 avril 2011
Statut
Membre
Dernière intervention
24 juin 2011
0
Merci
Oui oui ils y sont! C'est pour sa je ne comprend pas pourquoi sa ne fonctionne pas.
Commenter la réponse de johnASP
Messages postés
14656
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
13 novembre 2019
90
0
Merci
Et avec
std::ifstream file(chemin)?

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
Messages postés
42
Date d'inscription
mardi 19 avril 2011
Statut
Membre
Dernière intervention
24 juin 2011
0
Merci
J'ai essayé aussi mais sa me donne les erreurs suivantes :

1>.\database.cpp(51) : error C2664: 'std::basic_ifstream<_Elem,_Traits>::basic_ifstream(const char *,std::ios_base::openmode,int)' : impossible de convertir le paramètre 1 de 'System::String ^' en 'const char *'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> Aucun opérateur de conversion défini par l'utilisateur disponible, ou
1> Impossible de convertir un type managé en type non managé
1>.\database.cpp(56) : error C3861: 'getline' : identificateur introuvable
Commenter la réponse de johnASP
Messages postés
14656
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
13 novembre 2019
90
0
Merci
Là, c'est plus normal ^^
Tu lui passe un String^ alors qu'il veut un char*
Il te faut faire une conversion.

Par contre, une question: tu penses coder en quel langage? C? C++? C++ managé?

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
Messages postés
3797
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 novembre 2019
90
0
Merci
Il manque:
#include <fstream>
ainsi qu'une convesion de std::string en C string.

En vrai C++:
std::string path = "...";
std::ifstream file(path.c_str());


A toi de trouver la conversion pour du C++ managé.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Commenter la réponse de cptpingu
Messages postés
42
Date d'inscription
mardi 19 avril 2011
Statut
Membre
Dernière intervention
24 juin 2011
0
Merci
Si je convertis un String^ en char* je vais perdre des informations?
Et je code avec Visual C++.
Commenter la réponse de johnASP
Messages postés
14656
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
13 novembre 2019
90
0
Merci
On me l'avait jamais faite celle-là...
Regarde ToCharArray()

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
Messages postés
42
Date d'inscription
mardi 19 avril 2011
Statut
Membre
Dernière intervention
24 juin 2011
0
Merci
Sinon auriez vous une autre méthode a me proposer pour connaître le nombre de ligne d'un fichier txt?

Merci de votre aide!
Commenter la réponse de johnASP
Messages postés
14656
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
13 novembre 2019
90
0
Merci
Les méthodes ne manquent pas

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13
0
Merci
n = nbrOctets valant 10 dans le fichier.
nbrLignes = n + 1;

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
42
Date d'inscription
mardi 19 avril 2011
Statut
Membre
Dernière intervention
24 juin 2011
0
Merci
Bonjour tous le monde!

Pouvez-vous me dire et m'expliquer ce qu'il ne va pas dans mon programme ci-dessous parce que la je vais partir en dépression...Je ne vois vraiment pas se qu'il y a..

ifstream in("essai.txt"); //Ouverture en mode lecture de "bdd.txt"
int nbLignes;
char ligne_char;
std::string ligne_string;
std::string ligne; //Création d'une chaine de caractere
nbLignes = 0;

while(std::getline(in, ligne)) //On lit chaque ligne du fichier que l'on stoke dans "ligne"
nbLignes++;
ligne_char = Convert::ToChar(nbLignes); //conversion int/char
ligne_string = Convert::ToString(ligne_char); //conversion char/string
textBox3->Text = nbLignes;
in.close(); //On ferme le fichier


Et ça me donne encor 2 erreurs..:

error C2679: '=' binaire : aucun opérateur trouvé qui accepte un opérande de partie droite de type 'System::String ^' (ou il n'existe pas de conversion acceptable)
error C2664: 'void System::Windows::Forms::Control::Text::set(System::String ^)' : impossible de convertir le paramètre 1 de 'int' en 'System::String ^'

Merci de votre aide!
Commenter la réponse de johnASP
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13
0
Merci
Si tu insistes à ne pas apprendre à coder en te cachant derrière tout un tas de libs, tu risques de déprimer encore longtemps.

Note que je dis cela pour ton bien.
Voila fait en 10 mn maxi:

#include <windows.h>
#include "utils.h"

char szappname[] = "nbrLgn";

DWORD nLinesInFile(char *pszFL)
{
__declspec(align(16)) BYTE buf[4096];
HANDLE hfl;
DWORD rw, n, nlines = 0;
hfl = CreateFile(pszFL, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
if(hfl == INVALID_HANDLE_VALUE) goto linesEXIT;
if(!GetFileSizeEx(hfl, (LARGE_INTEGER*) buf)) goto flCLOSE;
if(0 >= *((INT64*) buf)) goto flCLOSE; // FICHIER VIDE

// LECTURE PAR PASSES DE 4 Ko SUR BUFFER ALIGNE, OPTIMAL
nlines = 1;
fromFL:
ReadFile(hfl, buf, 4096, &rw, 0);
n = rw;
if(!n) goto flCLOSE; // FICHIER FINI
do {
if(buf[n - 1] == 10) nlines++;
} while(--n);
if(rw == 4096) goto fromFL; // POSSIBLE ENCORE OCTETS
flCLOSE: CloseHandle(hfl);
linesEXIT: return nlines;
}

DireNbrLignes()
{
DWORD n;
char buf[24];
n = nLinesInFile("D:\\aa.txt");
*bnultoa(n, buf) = 0;
MessageBox(0, buf, szappname, 0);
}

#pragma comment(linker, "/entry:myWinMain")
void __fastcall myWinMain()
{
DireNbrLignes();
ExitProcess(0);
}


ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
42
Date d'inscription
mardi 19 avril 2011
Statut
Membre
Dernière intervention
24 juin 2011
0
Merci
Bonjour,

C'est bon, j'ai enfin trouvé! Voici mon code si sa pe aider..

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)
{
ifstream in("C:\\Documents and Settings\\jwarzycka\\Bureau\\Database\\GBA15_25_AGCOv0.1.dbc"); //Ouverture en mode lecture de "bdd.txt"
int nbLignes;
std::string ligne; //Création d'une chaine de caractere
nbLignes = 0; //Initialisation de la variable à 0
if (! in) //Si fichier inexsistant faire....
{
textBox3->Text = ("Erreur d'ouverture du fichier");
}
else
{
while(std::getline(in, ligne)) //On lit chaque ligne du fichier que l'on stoke dans "ligne"
nbLignes++;
textBox3->Text = nbLignes.ToString();
in.close(); //On ferme le fichier
}
}

C'est fou le temps que l'on peut perdre pour des conneries...
Merci à tous!!!
Commenter la réponse de johnASP
Messages postés
14656
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
13 novembre 2019
90
0
Merci
Moi, je mettrais à jour la textBox une fois le traitement terminé seulement. Car là, tu le remets à jour à chaque fois...


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
Messages postés
42
Date d'inscription
mardi 19 avril 2011
Statut
Membre
Dernière intervention
24 juin 2011
0
Merci
ah oui merci j'avais pas fait attention!

Et juste au passage, vous connaissez un bon tuto (si possible en français..) sur l'utilisation des DataGridView?
Commenter la réponse de johnASP