[c++] eine zeile aus einer datei lesen

Mavericklp

Erfahrenes Mitglied
moin zusammen

also ich möchte gerne mal einen eigenen ip scanner schreiben. benutze dev c++ und würde am liebsten komplett in c++ und nicht in c schreiben

so den ip scanner habe ich fertig allerdings simulirt dieser nur das scannen (mit einem zufalls generator wird ausgegeben ob die ip vorhanden ist und wen ja wie lange er gebrauchst hat)

jetzt würde ich gerne richtig scannen lassen und als zusatz einfügen, das das programm aus einer datei zeile für zeile die ip auslist ob dieses mit 4 variabln oder nur einer passirt ist mir relativ egal gebe nur zwischendurch die ip mit punkten aus also z.b. 192.168.0.10

bisher habe ich dafür:
Code:
ifstream fin("ip.txt");
if(!fin)    //fals datei nciht gefunden
{ 
	system("CLS");
        cout<<"Datei nicht gefunden!!\n\n";
	cout<<"Die Datei **ip.txt** fehlt\n\n";
	cout<<"Die Datei muss beim Programm liegen\n\n";
	do{
		system("color 07");    // verursacht nur augen krebs (irgend einen sinn
		_sleep(400);             // müssen farben doch harben oder
		system("color 0c");
		_sleep(200);
		b++;
	}
	while(b!=10);*/
	system("pause"); 
	return 0;
}
ifstream finn("ip.txt");     //hier gehts weiter wen die datei vorhanden ist
for (i=0;!finn.eof();i++)
{finn.getline(ip,25); 
break;}             
finn.close();
so nun würde ich das gerne so gestalten, das ich eine zeilen nummer übergebe und diese zeile wird ausgelesen und es wird dann zu der adresse geping

allerdings ist dort noch irgend wo der wurm drin weil bekomme fehlermeldungen
achso #include <fstream.h> steht am anfang damit das ganze überhaupt funktionirt (wen es richtig geschreiben ist)
 
1. In der Zeie 'while(b!=10);' hast Du ein Blockkommentarende, das da nicht hingehört.
2.
Code:
 for (i=0;!finn.eof();i++)
{finn.getline(ip,25); 
break;}
In dieser for-Schleife verwendest Du eine Zählervariable i (ich gehe mal davon aus, daß sie irgendwo oberhalb definiert ist). Diese Variable ist hier völlig sinnlos, da sie nirgendwo verwendet wird.
Weiterhin prüfst Du eof am Schleifenbeginn. Das wird aber erst gesetzt, wenn ein Leseversuch schon eof detektiert hat und somit fehlgeschlagen ist.
Außerdem verläßt Du die Schleife nach dem ersten Lesen mit break.
Mit einem Wort: Die Schleife ist Murks :-)
 
Das Lesen einer bestimmten Zeilennummer würde ich lösen, wie im Beispielcode zu sehen ist, also die Datei zeilenweise einlesen und bei der gewünschten Position stehenbleiben. Den Stream solltest du nur einmal und nicht zweimal hintereinander öffnen.

Gruß
MCoder

C++:
include <fstream> // ohne .h 
include <string>

int nLineNumber = ... ; // Gewünschte Zeilennummer

ifstream fin("ip.txt");

if( !fin.is_open() )
{
    // ...   Datei nicht gefunden
}    
else
{
    string strLine;
    int    nLineCounter = 0;
    
    while( getline(fin, strLine) )
    {
        if( nLineCounter == nLineNumber )
        {
            // ... Irgendwas mit der Zeile machen
            
            break;    
        }         
        
        nLineCounter++;   
    }
    
    file.close();
}
 
DANKE für die rasche hilfe

(das mit dem nicht geöffneten komentar war nicht absichlich :D)

werde es mal ausprobiren hört sich aufjeden fall viel versprechend an!! stell den gesamten quelltext mal online (wen das programm irgend wann mal fertig ist):)

die adresse liegt dann in der variable strLine? oder muss ich diese noch auslesen? wen ja wie?
 
Zuletzt bearbeitet:
Zurück