PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Neue Zeile im Stream erkennen



martin082
27-06-2006, 15:34
Hallo, ich lese aus einer datei einen Stream ein. Es sind in diesem mehrere Zeilen gespeichert. Ich wollte jetzt dass diese durchgezählt werden. Habe es mit folgender Möglichkeit versucht:

if(daten[i] == '\n')
{
zeilennr++;
}

Daten ist hierbei der Stream durch den in einer For-Schleife gelaufen wird. '\n' sollte ja eigentlich für "newline" stehen. Allerdings ohne Erfolg. Die Variable Zeilennr wird mit 1 initalisiert und hat diesen Wert auch bis zum Schluß. Hat jemand einen anderen Vorschlag? mfg

bischi
27-06-2006, 16:27
'\n' ist glaub ich nicht so allgemein. Kommt auf Editor und OS draufan (\r gibts glaub auch noch - oder sogar die Kombination von beiden...)

MfG Bischi

locus vivendi
27-06-2006, 17:33
Hat jemand einen anderen Vorschlag?
Ja. Benutze vorgefertige Komponenten (Klassen, Funktionen, ...) die bereits das machen was du willst, anstatt es selber zu schreiben.

So ungefähr könnte das aussehen, aber nicht getestet, nur schnell dahingetippt:


std::ifstream datei("dateiname", std::ios_base::in);
if(datei.is_open() )
{
std::string zeile;
while(std::getline(datei, zeile) )
{
// Was mit zeile machen.
}
// Hier noch überprüfen warum die Schleife abgebrochen wurde.
}
else
{
// ....
}

Benötige Header musst du noch einbinden.

So vermeidest du übrigens auch, die ganz Datei erst in den Speicher laden zu müssen.

martin082
27-06-2006, 19:17
Danke für die Vorschläge. Das Problem ist nur dass das in C und nicht C++ realisiert werden muss. Ich arbeite Mit einem Windows System und dem VC6.0 Compiler

nul
27-06-2006, 19:19
getline gibt es auch in c, ist aber eine gnu erweiterung wenn ich nicht irre.

jeebee
27-06-2006, 21:40
in C:
#include <stdio.h>
int main(int argc, char *argv[]) {
/* was auch immer */
FILE *f = fopen("dein_file", "r");
char line[512];
fgets(line,sizeof(line),f);
/* mach was */
return 0;
} mal angenommen, dass deine Zeilen nicht länger als 512 Zeichen sind.

martin082
28-06-2006, 10:47
Ok Danke, das klappt so, mit fgets() wird jeweils eine neue Zeile ausgelesen, das wusste ich nicht.