在Pascal

时间:2017-01-17 17:06:50

标签: 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中的每个SECOND行都是空的。这意味着,在使用txt中的元素填充链接列表时,我必须跳过每一个空行。

  • 如何告诉编译器跳过每2 /空行?
  • 如何告诉我的编译器只读取某一行?

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

<小时/> 我的txt内部看起来完全像这样:

#1: Bisasam. // 11 kg 

#2: Bisaknosp. // 22 kg

#3: Bisaflor. // 33 kg
 

正如您所看到的,每隔一行都是空白的,当它试图在我的列表中加载一个空行时会崩溃。

1 个答案:

答案 0 :(得分:1)

您只需添加额外的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;

      ...

请注意,这假设非空行是文件中的奇数行,即第一行是非空的,第二行是空的,等等。如果是另一种方式,则移动{{1转到Readln(Textdatei);循环的开头而不是结尾。