Parsen einer ASF-Datei mit eingerueckten Zeichen

einszwo

Grünschnabel
Hallo,

ich bin gerade dabei einen Parser fuer ein ASF-File zu schreiben.
Momentan liest er mir Zeile fuer Zeile mit sscanf aus. Das klappt eigentlich super. Allerdings sind einige Zeichen in meiner Bsp-Datei eingerueckt:
Code:
#
# Comment line
##
 #
:version 1.10
:name BioSkeleton
:units
   mass 1.0   #vor mass, length, angle sind urspruenglich 3 leerzeichen, die man hier nicht sieht
   length 1.0
   angle deg
:documentation
   Example of an Acclaim skeleton
   To be used with "Walk.amc"
:root
   axis XYZ
   order TX TY TZ RZ RY RX
   position 0.0 0.0 0.0
   orientation 0.0 0.0 0.0


Meine bisherige Loesung sieht so aus: 

void FileIO::ReadLine(FILE* f, char* string) 
{	
	do { fgets(string, 255, f); } 
	while ((string[0] == '#') || (string[0] == '\n') || feof(f));
	return;	
}

int FileIO:: getASF()
{//...
	
	//mass
	string sline;
	string smass;
	ReadLine(fileptr, line);
	while(line[i] == ' ')
	{
                            i++;
	}
	sline += line;
	smass = sline.substr(i+5,3);
	const char* cmass = smass.c_str();
	mass = atof(cmass);
	printf("%f\n", mass);
}


Bei meinem konkreten Bsp des ASF files wuerde es wohl auch so gehen:
Code:
ReadLine(fileptr, line);
sscanf(line,"   mass %f ",&mass); //indem ich ihm sage, dass dort vorher 3 leerzeichen stehen
printf("length: %f\n",mass);

Gibt es einen einfacheren Weg, die Leerzeichen zu ueberspringen? Das Problem ist, dass die Anzahl der Leerzeichen von file zu file variieren...

Danke.
 
Wenn du eine Zeile verarbeitest, dann überließ hald einfach alle Leerzeichen am Anfang des Strings, dabei auch die Tabulatoren evtl. überlesen.

Gruß Homer
 
Das versuche ich ja mit der while-schleife.
Damit bekomme ich die Position im char, an dem die Info beginnt.
Leider kann ich sscanf nicht einfach sagen, dass es ab dieser Stelle einlesen soll.
Momentan mache ich es ja so, dass ich mein char line in einen string umwandele und dann an die Position springe. Allerdings ist die Zahl ein float und um das hinzukommen, muss ich ja erst wieder in char und dann in float umwandeln.
Ich denke, es muesste auch einfacher gehen.
 
Zurück