Ich habe eine Datei, und ich muß überprüfen, ob seine Zeilen im folgende Format:erkennen, ob ein Linienspiel in ein Format ist - in C
Name: name1, name2, name3, name4 ...
(einige Zeichenfolge, gefolgt von ":", dann ein Leerzeichen und danach Zeichenfolgen getrennt durch ",").
Ich versuchte es mit dem folgenden Code tun:
int result =0;
do
{
result =sscanf(rest,"%[^:]: %s%s", p1,p2,p3);
if(result==3)
{
printf("invalid!");
fclose(fpointer);
return -1;
}
}while (fgets(rest ,LINE , fpointer) != NULL);
das funktioniert gut für Zeilen wie: Name: name1, name2 (mit Leerzeichen zwischen name1 und name2).
aber es funktioniert nicht mit der folgenden Zeile:
Name: name1, name2
Ich mag sscanf irgendwie sagen, nicht diesen weißen Raum vor der vermeiden ":".
könnte jemand sehen, wie?
Vielen Dank für Ihre Hilfe!
Wahrscheinlich hilft '% [^,]' (mit vorangestelltem Leerzeichen, um das optionale Leerzeichen zu überspringen) und sucht nach einer Folge von Nicht-Kommas. Sie müssen auch in der Lage sein, Ihren Scan zu wiederholen, wenn Sie 3, 4, 5, ... Namen behandeln müssen. Siehe dazu [Wie verwende ich 'sscanf()' in Schleifen?] (Http://stackoverflow.com/questions/3975236/) –
Also, was ist dann deine eigentliche Anforderung? * (ein String, gefolgt von ":", dann ein Leerzeichen und danach Strings getrennt durch ",") * - vielleicht sollten Sie das so umschreiben, dass zwischen jedem dieser Trennzeichen "ein oder mehrere Leerzeichen" stehen. – Groo
Die Funktionsfamilie ['scanf'] (http://en.cppreference.com/w/c/io/fscanf) ist nicht wirklich gut für das allgemeine Parsing geeignet. Stattdessen möchten Sie vielleicht nach dem Doppelpunkt ''suchen:' 'mit [einige andere Funktion] (http://en.cppreference.com/w/c/string/byte/strchr) und dann verwenden Sie' sscanf', um die extrahieren andere zwei Saiten. –