在 Pascal 中跳过 txt 文件中的每一行

Skip every second line in a txt file 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();

所以,这段代码不能正常工作,因为我加载的 txt 文件包含空行。更准确地说:txt 中的每一行都是空的。这意味着,在用 txt 中的元素填充我的链表时,我必须跳过每个空行。

如果你回答了我的任何一个问题,我终于可以完成我的小程序了。


我的 txt 的内部看起来完全像这样:

#1: Bisasam. // 11 kg 

#2: Bisaknosp. // 22 kg

#3: Bisaflor. // 33 kg
 

正如您所见,每隔一行都是空白行,当它试图将空白行加载到我的列表时,它崩溃了。

您可以只添加一个额外的 Readln 来跳过空白行,因此您的代码变为:

      ...

      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;

      ...

请注意,这里假设 non-empty 行是文件中的奇数行,即第一行是 non-empty,第二行是空的,等等。如果反过来然后将 Readln(Textdatei); 移动到 WHILE 循环的开头而不是结尾。