Formatiertes Einlesen (sscanf, regex?)



  • Hallo,

    es gibt ja die folgende Möglichkeit:

    sscanf(line, "%s%[^\n]", string1, string2);
    

    Der letzte String wird bis zum Zeilenende gelesen. Ist ja so eine Art regex?
    Gibt es im Netz eine Seite, wo mehr von diesen Sachen stehen? Habe schon Dr. Google gefragt, doch nichts passendes gefunden oder falsch gesucht?

    Ich möchte z.B. einen String einlesen, der aus den Zeichen der Menge [A-Za-z0-9]
    besteht und mindestens ein Zeichen lang ist. Letzteres werde ich wohl anders prüfen müssen.

    Sippi



  • da gibts schon was, irgendwo auf seite 2 =b verwend einfach mal die such-funktion =b



  • Sorry, danke für den Hinweis. Habs gefunden und klappt wunderbar.

    Ich habe da eine Frage am Rande, bezieht sich nicht ganz auf
    das Thema:

    Ich lese via sscanf() mehrere Strings ein und habe nun schon über
    10 Strings deklarieren müssen (und somit auch über 10 malloc's und free's).

    Als kleines Beispiel:

    sscanf(line, "%s%s%s%s%s%s%s",string1, string2, string3, string4, string5, string6, string7);
    

    Anders geht es nun mal nicht, auch wegen Überprüfung etc. Ich reserviere fuer jeden String die gleiche Größe an Speicher. Kann man das nicht besser lösen, sodass man eine Schleife durchgehen kann, wo man Speicher reserviert bzw. löscht? Irgendwie in eine Struktur?



  • char **strArray
    

    Zeiger auf String, quasi ein String-Array.



  • genau, und dann liest du einfach über ne for-schleife ein (so mach ichs halt),

    dann entweder string-weise, also mit sscanf() oder zeichenweise, sprich: getch()
    oder besser getche();

    bei stringweise einfache schleife, bei zeichenweise verschachtelte schleife...



  • Ok, dann für den Tipp.

    Um doch nochmal auf das Einlesen von Strings zurückzukommen:

    Wie kann denn folgendes realisieren (darüber hab ich nichts gefunden):

    Wenn beim Einlesen eines Strings via sscanf() ein String Leerzeichen enthält,
    muss dieses mit doppelten Anführungszeichen (") gekennzeichnet werden.
    Als Beispiel: "Hallo du da", bei einem String ohne Leerzeichen (Hallo) ist dies nicht notwendig. Die Anführungszeichen werden nach dem Einlesen gelöscht, das ist ja relativ einfach, das ist nicht das Problem. Aber wie mach ich das beim Einlesen?

    Momentan teilt er mir den String "Hallo du da" wie folgt auf:
    "Hallo
    du
    da"

    Irgendwelche Ideen?



  • char *line = "Hallo du da", tmp[100];
    int n = 0;
    while( 1==sscanf(line+=n,"%s%n",tmp,&n) )
      puts(tmp);
    

Log in to reply