[C++] Datei auslesen - datensaetze werden einfach hinzugefuegt

heroeskiller

Grünschnabel
Hallo,
Ich bin noch neu in C++ und hab erst vor ein paar Tagen damit angefangen.
Nun stehe ich vor dem Problem eine Datei auszulesen.

Die da ist ca so auf gebaut:
Code:
## KOMMENT..
XPLEVELS 0 342 2344  2345435 34553455 345435345535575 67567567456345636546
Die Stellen der Zahlen werden willkürlich erhöht.
Die genauen zahlen stimmen da jetzt nicht mit überein.
Aber diese Zeile hat 101 Zahlen und das "XPLEVELS".

Ich habe versucht diese Zeile mit getline auszuwerten.
Da klappt auch soweit.
Ich kenn diese Zeile komplett aufrufen.
Ich kann jedoch nicht die Zahlen trennen, da mir irgendwelche Datensaetze untergejubelt werden, die nicht in der Datei vorkommen.

Auszug aus meiner Schleife:
Code:
		int ai;
		char lulu;
		int inc = 0;
		int key[1024];
		int inc2 = 0;

for(testomato = 0; testomato < 775; testomato++)
		{
			if(numlevels[numlevels_zaehler][testomato] == ' ')
			{
				inc++;
				continue;
			}
			
		key[inc] = (int)key[inc] + (int)atoi(&numlevels[numlevels_zaehler][testomato]);
			printf("%d--", key[inc]);


So rufe ich getline auf (funktioniert auch)
Code:
char numlevels[20][4096];
while(meintext.getline(numlevels[numlevels_zaehler], 4096))

Dieser aufruf hier Funktioniert:
(Die ganze Zeile wird ausgegeben)
Code:
printf("%s\n", numlevels[numlevels_zaehler]);

Ich benutze Visual c++ 2008 Express und habe Windows Vista.
 
Zuletzt bearbeitet:
Moin,

bis auf den Aufruf "meintext.getline" hat dein Code nix mit C++ zu tun. Er ist in C. Wenn du die Zeile eingelesen hast könntest du versuchen diese einfach an den Leerzeichen zu splitten. Die einzige (C-)Funktion die mir dazu einfällt ist strtok.
 
Zuletzt bearbeitet von einem Moderator:
Moin,

bis auf den Aufruf "meintext.getline" hat dein Code nix mit C++ zu tun. Er ist in C. Wenn du die Zeile eingelesen hast könntest du versuchen diese einfach an den Leerzeichen zu splitten. Die einzige (C-)Funktion die mir dazu einfällt ist strtok.

Funkioniert Leider auch nicht.
Mir wird immer nur der Wert "XPLEVELS" angezeigt.

Code:
char *pch;
char meins[200][1024];


// in der schleife:
pch = strtok(numlevels[numlevels_zaehler]," ,.-");
strcpy(meins[testomato], pch);
printf("%s--", meins[testomato]);
 
Hab strtok selbst noch nie benutzt aber versuch mal sowas in der Art
C:
char* token = strtok(numlevels[numlevels_zaehler], " ");

while(token != NULL && testomato < 775) {
    strcpy(meins[testomato], token);
    printf("%s--", meins[testomato]);
    token = strtok(NULL, " ");
    testomato++;
}

BTW wofür steht das -- hinter dem %s in der printf?
 
Danke das funktioniert.
Das "--" ist einfach nur da, um die Zahlen anzuzeigen und auseinander zuhalten.
\r\n wäre zu groß gewesen.

Aber eine Frage haette ich noch:
Was genau bewirkt "token = strtok(NULL, " ");"?
 
www.cplusplus.com hat gesagt.:
On a first call, the function expects a C string as argument for str, whose first character is used as the starting location to scan for tokens. In subsequent calls, the function expects a null pointer and uses the position right after the end of last token as the new starting location for scanning.
http://www.cplusplus.com/reference/clibrary/cstring/strtok.html

Beim ersten Aufruf wird der String übergeben und von Anfang an nach einem Leerzeichen gesucht. Zurückgegeben wird dann der String bis zum ersten Leerzeichen. Wenn man in dem vorherigen String weiter suchen möchte muss man den Null-Pointer übergeben. Wenn dort wieder der String übergeben werden würde, würde wahrscheinlich wieder am Anfang angefangen werden und nicht an der aktuellen position. Das wiederholt man einfach so lange bis die Funktion irgendwann NULL zurück gibt.

Was mir grad einfällt... wird die letzte Zahl richtig zurück gegeben oder nur die die vor dem letzten Lerzeichen steht?
Falls die letzte Zahl fehlt sollte man sich die mittels strchr holen können.
char *strchr(cs,c) liefert Zeiger auf das erste c in cs oder NULL, falls nicht vorhanden.
http://www2.fh-fulda.de/~klingebiel/c-stdlib/string.htm
 
Zurück