strng zerschneiden

tommy07

Mitglied
Hallo,
habe eine Textdatei erstellt mit ganz vielen Nummern. Zur Besseren Übersicht habe ich die Zeilen nummeriert.

Beispiel:

1 23
2 34
3 40
.......

nun möchte ich diese Nummerierung entfernen. Zum Auslesen aus der Textdatei habe ich folgendes Programm:

Code:
char buffer[256];
  ifstream examplefile2 ("zahlen.txt");
  if (! examplefile2.is_open())                  
  { cout << "Error opening file"; exit (1); }

  while (! examplefile2.eof() )                  
  {
    examplefile2.getline (buffer,100);           
    a[h]= atoi(buffer);
  h=h+1;
  }

Weiß jemand, wie ich diese Nummerierung wegbekomme?

cu tommy

P.S.: kennt jemand vielleicht ein Nachschlagewerk (im Netz)
 
Also wenn die Zahl, die du abspeichern willst, immer durch einen Space von der Zeilennummer getrennt ist, ersetzt du einfach das :

a[h]= atoi(buffer);

durch

a[h]=atoi(strchr(buffer, ' ') + 1);
 
danke.
leider funktioniert das noch nicht... es könnte daran liegen, dass sich vor der Nummerierung noch ein Leerzeichen befindet. Kann ich das trotzdem noch nach der Nummerierung schneiden?

tommy
 
Dann solltest Du vorher die führenden Nullen entfernen:
Code:
int iSpaceCount = 0;
   int iIndex;
  
   while(buffer[iSpaceCount] == ' ')iSpaceCount++;
   if(iSpaceCount > 0)
   {
    iIndex = iSpaceCount;
    while(buffer[iIndex] != 0)
    {
   	buffer[iIndex - iSpaceCount] = buffer[iIndex];
   	iIndex++;
     }
    buffer[iIndex - iSpaceCount] = 0;
   }
So ungefähr, ist aber nicht getestet.
 
wenn ich das recht versehen willst du die Funktion strtok() verwenden....
Das Stückchen code entfernt dir jeweils nur die führende zahl !
Code:
char *eineZeileVonDeinerDatei = "11irgendwas 11dsadasd";

char *pcToken;
pcToken = strtok(eineZeileVonDeinerDatei, " "); // das gibt dir 11irgendwas zurueck
// noch einmal angewandt mit
pcToken = strtok(NULL, " ");
/* in pcToken steht nun: 11dsadasd*/

nicht getestet, müsste aber so gehn

mfg
 
also, wie muss ich das jetzt anstellen?

Code:
char buffer[256];
  ifstream examplefile2 ("zahlen.txt");
  if (! examplefile2.is_open())                  
  { cout << "Error opening file"; exit (1); }

  while (! examplefile2.eof() )                  
  {
    
char *pcToken;
pcToken = strtok(examplefile2.getline (buffer,100), " "); // das gibt dir 11irgendwas zurueck
// noch einmal angewandt mit
pcToken = strtok(NULL, " ");
          
    a[h]= atoi(pcToken);
  h=h+1;
  }

geht das klar mit der leerstelle, die am Anfang steht?

tommy
 
Zuletzt bearbeitet:
hmm

ja das würde dir pro zeile die NUMMER und DAS LEERZEICHEN entfernen.
wenn dein Eintrag so aussieht "1 23", dann geht das wunderbar...

zu verdeutlichung:
Code:
char *pcToken;
pcToken = strtok("1 GUGUCK", " ");
// pcToken = "1"
// " GUGUCK" ist aber noch immer in der Funktion zwischengebuffert.
pcToken = strtok(NULL, " ");
// jetzt wird das LEERZEICHEN weggeschnippselt und in pcToken steht "GUGUCK"

mfg
 
Na wenn wir schon Streams verwenden, dann müssen wir es doch nicht unnötig kompliziert machen...
Code:
ifstream examplefile2 ("zahlen.txt");
	
if (!examplefile2.is_open()) {
	cout << "Error opening file";
	exit(1);
}

int iZeile, iWert;	
while (!examplefile2.eof()) {
	examplefile2 >> iZeile >> iWert;
	a[h] = iWert;
	h++;
}
Tut's genauso :)
 
Zurück