tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
23
ZUGRIFFE
460
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Crosaider Crosaider ist offline Mitglied
    Registriert seit
    Apr 2009
    Beiträge
    12
    Hallo @ all

    Ich habe folgendes problem. Ich habe eine Textdatei, in welcher ganze viele Reihen ca soetwas steht:

    : 0 3 14 Bla

    Nun möchte ich gerne jedes einzelne "Wort" außer den Doppelpunkt in einer Variable speichern. Die Zahlen können sich auch bis in die 1000 erstrecken - haben also unterschiedliche Längen und auch das Wort kann natürlich unterschiedlich lang sein. Alles zusammen ist aber nie Länger als 30 Zeichen. Habe zu Testzwecken erstmal so was versucht:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    
    int main()
    {
        char start[4] = "", laenge[4] = "";
     
        FILE *txt = fopen("text.txt", "rb");
        char  *Data;
        int iL, iLeerzeichen;
     
        fgets(Data, 25, txt);
        iLeerzeichen = 0;
     
        for(iL=2; iL < 25; iL++)
        {
            if (iLeerzeichen == 3)
            {
                break;
            }
     
            if (Data[iL] == ' ')
            {
                iLeerzeichen += 1;
            }
            else
            {
                switch (iLeerzeichen)
                {
                    case 0:
                        strcat(start, Data[iL]); // String anhängen
                        break;
                    case 1:
                        strcat(laenge, Data[iL]); // String anhängen
                        break;
                    case 2:
                    // String anhängen
                        break;
                }
            }
        }
     
        printf("Start: %s\nLaenge: %s\n", start, laenge);
        return 0;
    }

    Das war ein Versuch die ersten beiden Zahlen auszulesen aber der ist leider schon groß gescheitert Wo ist der Fehler bzw. kann man das noch optimieren damit es möglichst schnell durchläuft. Hierbei kommt es extrem auf schnelligkeit an.

    Ich möchte zum Schluss halt 4 Variablen (3 Integer, 1 String) haben. Kann sich jemand vllt mal den Code angucken und sagen was ich falsch gemacht habe? Das ganze muss leider in reihnem C (kein C++) sein. Ich hoffe ihr könnt mir helfen.

    Viele Grüße
    Crosaider
     

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Hi

    sind immer genau drei Zahlen vor dem Wort?
    Kann das "Wort" auch ein Satz mit Leerzeichen sein?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  3. #3
    Crosaider Crosaider ist offline Mitglied
    Registriert seit
    Apr 2009
    Beiträge
    12
    Ja es sind immer genau 3 Zahlen vor dem Wort. Das Wort ist aber nie ein Satz - es besteht einfach immer nur aus einem Wort - keine Leerzeichen.

    Der Doppelpunkt am Anfang jeder Zeile soll gar nicht beachtet werden...
     

  4. #4
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Verwende fscanf.
    Mit einem Befehl die ganze Zeile einlesen:
    Code cpp:
    1
    2
    3
    4
    
    int z1, z2, z3;
    char wort[30];
    ...
    fscanf(txt, ": %d %d %d %s", &z1, &z2, &z3, wort);
    Mit Fehlerüberprüfung:
    Code cpp:
    1
    2
    3
    4
    
    if(4 != fscanf(txt, ": %d %d %d %s", &z1, &z2, &z3, wort))
    {
        //Fehler
    }

    Gruß
    Crosaider bedankt sich. 
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  5. #5
    Crosaider Crosaider ist offline Mitglied
    Registriert seit
    Apr 2009
    Beiträge
    12
    super thx das funktioniert wunderbar

    Allerdings wird bei dieser Methode der File-Deskriptor nicht weitergesetzt - deswegen kann ich nicht einfach so (mit dem gleichen Aufruf) auf die zweite zeile zugreifen. Hast dafür auch noch eine Lösung?
     

  6. #6
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Hm, was ist denn mit
    Code cpp:
    1
    
    fscanf(txt, ": %d %d %d %s\n", &z1, &z2, &z3, wort)
    Crosaider bedankt sich. 
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  7. #7
    Crosaider Crosaider ist offline Mitglied
    Registriert seit
    Apr 2009
    Beiträge
    12
    Kommt leider das gleiche bei rum...
     

  8. #8
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Warum verwendest du bei fopen "rb"?
    Was ist mit "r"?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  9. #9
    Crosaider Crosaider ist offline Mitglied
    Registriert seit
    Apr 2009
    Beiträge
    12
    Habs in der Schule immer mit "rb" gelernt. Aber auch wenn ichs in "r" ändere funktioniert es leider nicht.
     

  10. #10
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Was passiert genau?
    Datei?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  11. #11
    Crosaider Crosaider ist offline Mitglied
    Registriert seit
    Apr 2009
    Beiträge
    12
    Also ich habs so gemacht:

    Code :
    1
    2
    3
    4
    5
    
    fscanf(txt, ": %d %d %d %s", &z1, &z2, &z3, wort);
    printf("Start: %d\nLaenge: %d\nTonhoehe: %d\nText: %s\n\n", z1, z2, z3, wort);
     
    fscanf(txt, ": %d %d %d %s", &z1, &z2, &z3, wort);
    printf("Start: %d\nLaenge: %d\nTonhoehe: %d\nText: %s", z1, z2, z3, wort);

    und es kommt beide Male zur gleichen ausgabe...
     

  12. #12
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Wie sind die ersten Zeilen der Datei?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  13. #13
    Crosaider Crosaider ist offline Mitglied
    Registriert seit
    Apr 2009
    Beiträge
    12
    Ersten Zeilen der Datei sehen so aus:

    : 0 3 14 John
    : 8 3 11 Peter
    : 16 2 14 Hanz
    : 20 2 14 Bernd
    : 24 3 11 Fritz

    -------EDIT-------
    Habs jetzt hinbekommen: Windows macht am Ende immer "/r/n" - wenn ich das ans Ende von fscanf schreibe gehts Dankeschön nochmal!
    Geändert von Crosaider (05.11.11 um 02:00 Uhr)
     

  14. #14
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Grad selbst getestet, bei mir funktionierts, wenn ich wie schon gesagt
    \n im fscanf reinnehme.

    Das hast du also probiert, und hat nicht funktioniert?
    Betriebssystem?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  15. #15
    Crosaider Crosaider ist offline Mitglied
    Registriert seit
    Apr 2009
    Beiträge
    12
    Also es geht jetzt wie oben gesagt thx

    Eine Sache hätte ich aber noch wenn in der Datei steht:

    : 20 2 14 Bernd (zwischen 14 und Bernd sind 2 Leerzeichen)

    soll er nur das erste Leerzeichen als Trennung ansehen und das zweite mit in den String nehmen. Wäre halt das was du am Anfang gefragt hast ob auch Leerzeichen drin vorkommen - sry nicht dran gedacht. Ist das sehr viel anders?
     

Ähnliche Themen

  1. [AS3] XML Datei auswerten
    Von SCIPIO-AEMILIANUS im Forum Flash Plattform
    Antworten: 0
    Letzter Beitrag: 03.01.10, 17:08
  2. log (*.txt)datei auswerten
    Von Wormz im Forum Visual Basic 6.0
    Antworten: 6
    Letzter Beitrag: 09.08.07, 20:12
  3. Datei auswerten (beschränkte Möglichkeiten)
    Von Razorhawk im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 28.09.05, 11:08
  4. Antworten: 3
    Letzter Beitrag: 17.05.05, 11:26
  5. Log-Datei auswerten
    Von poolpage im Forum PHP
    Antworten: 4
    Letzter Beitrag: 11.08.02, 14:41