2017-01-17 1 views
-1

Dies ist mein Code (nicht die deutschen Variablennamen beachten):jede zweite Zeile in einer txt-Datei in Pascal

IF Frage = 1 THEN 
    BEGIN 

     Reset(Textdatei); 
     Writeln; 
     i := 0; 

     WHILE NOT EoF(Textdatei) DO 
     BEGIN 
       Inc(i); 
       Readln(Textdatei,Dateiname); 

       // NUMMER 
       IF i < 10 THEN 
       BEGIN 
        Temp := Copy(Dateiname,2,1); // Speichert position als Str 
        posTemp := StrToInt(Temp); // position wird als Int gespeichert 
        pos0 := posTemp; 

       END; 

       IF (i < 100) AND (i > 9) THEN 
       BEGIN 
        Temp := Copy(Dateiname,2,2); 
        posTemp := StrToInt(Temp); 
        pos0 := posTemp; 

       END; 

       IF (i >= 100) THEN 
       BEGIN 
        Temp := Copy(Dateiname,2,3); 
        posTemp := StrToInt(Temp); 
        pos0 := posTemp; 

       END; 

       // NAME 
       posTemp := pos(' ',Dateiname); 
       posTemp2:= pos('.',Dateiname); 
       UnknownLength := (posTemp2-1) - posTemp; 
       Temp := Copy(Dateiname,posTemp+1,UnknownLength); 
       Name := Temp; 

       // KG 
       posTemp := pos('// ',Dateiname); 
       posTemp2:= pos('kg',Dateiname); 
       posTemp := posTemp + 2; 
       UnknownLength := (posTemp2-1) - posTemp; 
       Temp := Copy(Dateiname,posTemp,UnknownLength); 
       posTemp := StrToInt(Temp); 
       KG := posTemp; 

       //Liste beschreiben 
       Liste := AddElement(Name, pos0, KG, Liste); 



     END; 

    END; 

    ClrScr; 
    Writeln('Laden erfolgreich!'); 
    Readkey; 
    Submenu(); 

So ist dieser Code nicht richtig funktioniert, weil die txt-Datei, die ich load enthält leere Zeilen. Um genau zu sein: Jede ZWEITE Zeile im TXT ist leer. Das bedeutet, dass ich jede leere Zeile überspringen muss, wenn ich meine verkettete Liste mit den Elementen aus dem txt ausfülle.

  • Wie kann ich dem Compiler sagen, jede 2/leere Zeile zu überspringen?
  • Wie kann ich meinem Compiler sagen, nur eine bestimmte Zeile zu lesen?

Wenn Sie eine meiner Fragen beantworten, kann ich endlich mein kleines Programm beenden.


Die Innenseite meiner txt sieht genauso aus wie folgt aus:

#1: Bisasam. // 11 kg 

#2: Bisaknosp. // 22 kg 

#3: Bisaflor. // 33 kg 
  

So wie Sie jede zweite Zeile ist zu sehen, leer, und wenn es eine leere Zeile in meiner Liste zu laden versucht, es stürzt ab.

+0

Hallo :) Ja, ich kann das tun, aber dann muss ich dem Compiler sagen, nur eine Leerzeile zu ignorieren und ich weiß einfach nicht die Syntax für Skip-Zeile oder zählen Sie die Zeilen oder was auch immer .. sorry im Anfänger :/könnte nicht finden, Anyhing auf Google entweder ... – user7285912

+0

Danke, aber irgendwie funktioniert es nicht. Es stürzt immer in dieser Zeile ab, wenn versucht wird, die Schleife ein zweites Mal zu durchlaufen: posTemp: = StrToInt (Temp); ---- aber vielleicht ist das Problem nicht die leere Zeile, vielleicht ist es etwas anderes, denn der Mod Test sollte total funktionieren ... und trotzdem stürzt er genau dort ab ..:: s – user7285912

Antwort

1

Sie können nur einen zusätzlichen Readln fügen Sie die leere Zeile zu überspringen, so dass Ihr Code wird:

 ... 

     WHILE NOT EoF(Textdatei) DO 
     BEGIN 
      Inc(i); 

      // *** read non-empty line containing data *** 
      Readln(Textdatei,Dateiname); 

      ... 

      //Liste beschreiben 
      Liste := AddElement(Name, pos0, KG, Liste); 

      // *** skip empty line *** 
      Readln(Textdatei); 

     END; 

     ... 

Beachten Sie, dass dies setzt voraus, dass die Nicht-Leerzeilen die ungeraden Zeilen in der Datei sind, dh die erste Die Zeile ist nicht leer, die zweite Zeile ist leer, usw. Wenn es andersherum ist, dann verschiebe den Readln(Textdatei); an den Anfang der WHILE Schleife anstatt an das Ende.

+0

Danke auch, aber es funktioniert nicht. Wenn ich das versuche, kann ich nur etwas in den Compiler eingeben und stürzt danach ab. Das Mod-Ding zu testen funktioniert leider auch nicht, und ich weiß nicht warum :(Ich bin so kurz davor, mein erstes "großes" Projekt zu beenden, wenn ich die While-Schleife überspringe jede leere oder jede ungerade oder jede zweite Zeile in der TXT-Datei. .. – user7285912

+0

@ user7285912: mein Schlechter - Ich habe den Dateideskriptor verpasst - Entschuldigung - versuchen Sie die feste Version ... –

+0

Interessant .. Nun, was es tut ist, es lässt mich drücken noch dreimal eingeben, bis es abstürzt ... Hat verpasse ich vielleicht noch etwas anderes?: s Könnte ich dir den ganzen Code schicken? xD – user7285912

Verwandte Themen