Ifstream, getline

johnASP Messages postés 42 Date d'inscription mardi 19 avril 2011 Statut Membre Dernière intervention 24 juin 2011 - 6 juin 2011 à 09:25
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.
A voir également:

16 réponses

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
6 juin 2011 à 10:50
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...
0
johnASP Messages postés 42 Date d'inscription mardi 19 avril 2011 Statut Membre Dernière intervention 24 juin 2011 1
6 juin 2011 à 11:22
Oui oui ils y sont! C'est pour sa je ne comprend pas pourquoi sa ne fonctionne pas.
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
6 juin 2011 à 11:33
Et avec
std::ifstream file(chemin)?

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
johnASP Messages postés 42 Date d'inscription mardi 19 avril 2011 Statut Membre Dernière intervention 24 juin 2011 1
6 juin 2011 à 12:08
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
6 juin 2011 à 13:53
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...
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
6 juin 2011 à 14:13
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
0
johnASP Messages postés 42 Date d'inscription mardi 19 avril 2011 Statut Membre Dernière intervention 24 juin 2011 1
6 juin 2011 à 16:02
Si je convertis un String^ en char* je vais perdre des informations?
Et je code avec Visual C++.
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
6 juin 2011 à 16:10
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...
0
johnASP Messages postés 42 Date d'inscription mardi 19 avril 2011 Statut Membre Dernière intervention 24 juin 2011 1
6 juin 2011 à 16:15
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!
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
6 juin 2011 à 16:28
Les méthodes ne manquent pas

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
6 juin 2011 à 17:07
n = nbrOctets valant 10 dans le fichier.
nbrLignes = n + 1;

ciao...
BruNews, MVP VC++
0
johnASP Messages postés 42 Date d'inscription mardi 19 avril 2011 Statut Membre Dernière intervention 24 juin 2011 1
7 juin 2011 à 12:06
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!
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 juin 2011 à 13:25
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++
0
johnASP Messages postés 42 Date d'inscription mardi 19 avril 2011 Statut Membre Dernière intervention 24 juin 2011 1
9 juin 2011 à 11:03
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!!!
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
9 juin 2011 à 11:15
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...
0
johnASP Messages postés 42 Date d'inscription mardi 19 avril 2011 Statut Membre Dernière intervention 24 juin 2011 1
9 juin 2011 à 12:10
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?
0
Rejoignez-nous