Найти, в каком году вышел первый альбом исполнителя - Free Pascal
Формулировка задачи:
Здравствуйте, есть текстовый файл, в нем информация о певце, кол-во песен, название альбома, год выпуска альбома, жанр. Информация разделена табом(Tab). Задача, найти в каком году вышел первы альбом и т.д. делоне в этом. В строчках 61 и 47 компилятор выдает ошибку, там стоит условие, если встречаем символ Таб, то выходим из тела цикла. Не могу понять, что не так. Подскажите.
Program WWTxtFile;
Uses
Crt,SysUtils;
Const
SimY='##';SimAl='***';
TxtFile='Kolekcija.txt';
AuxiliaryF='MaxMin.txt';
Type
InPut=Record
YearMax:String;
AlbumMax:String;
YearMin:String;
AlbumMin:String;
end;
Var
F:File of InPut;
T:Text;
Procedure Initial;
var
Rab:InPut;
begin
Assign(F,AuxiliaryF);
Reset(F);
With Rab do
begin
YearMax:='0';
AlbumMax:='0';
YearMin:='9999';
AlbumMin:='99';
end;
Write(F,Rab);
Close(F);
end;
Function FindYear(Str:String;I:Byte):String;
var
Temp:String;
J:LongInt;
begin
Temp:='';
J:=I+Length(SimY);
Repeat
Temp:=Temp+Str[J];
Inc(J);
Until Str[I]=#9;
FindYear:=Temp;
end;
Function FindAl(Str:String;I:Byte):String;
var
Temp:String;
J:LongInt;
begin
Temp:='';
J:=I+Length(SimAl);
Repeat
Temp:=Temp+Str[J];
Inc(J);
Until Str[J]=#9;
FindAl:=Temp;
end;
Procedure InPutData;//sozdanije fajla s max i min godom, max koli4estvo albomov i minimalnim kol-vo albomov
var
I:LongInt;
Rab:InPut;
Str:String;
Year,AlCount:String;
begin
ReadLn(T,Str);
Str:=Str+#9;
WriteLn(Str);
For I:=1 to Length(Str) do
begin
If Str[I]='#' then Year:=FindYear(Str,I);
If Str[I]='*' then AlCount:=FindAl(Str,I);
end;
With Rab do
begin
If StrToInt(YearMax)<StrToInt(Year) then YearMax:=Year;
If StrToInt(YearMin)>StrToInt(Year) then YearMin:=Year;
If StrToInt(AlbumMax)<StrToInt(AlCount) then AlbumMax:=AlCount;
If StrToInt(AlbumMin)>StrToInt(AlCount) then AlbumMin:=AlCount;
end;
Write(F,Rab);
end;
Begin
ClrScr;
Assign(T,TxtFile);
Reset(T);
Initial;
While Not EoF(T) do
begin
Assign(F,AuxiliaryF);
Reset(F);
InPutData;
Close(F);
end;
Close(T);
End.Решение задачи: «Найти, в каком году вышел первый альбом исполнителя»
textual
Листинг программы
Program WWTxtFile; Uses Crt,SysUtils; Const SimY='##';SimAl='***'; TxtFile='Kolekcija.txt'; AuxiliaryF='MaxMin.txt'; Type InPut=Record YearMax:String; AlbumMax:String; YearMin:String; AlbumMin:String; end; Var F:File of InPut; T:Text; D:InPut; Procedure Initial(var Rab:InPut); begin Assign(F,AuxiliaryF); Reset(F); With Rab do begin YearMax:='0'; AlbumMax:='0'; YearMin:='9999'; AlbumMin:='99'; end; Write(F,Rab); Close(F); end; Function FindYear(Str:String;var I:Byte):String; var Temp:String; J:LongInt; begin Temp:=''; J:=I+length(SimY); I:=J; while (Str[J]<>#9) do begin Temp:=Temp+Str[J]; Inc(J); end; FindYear:=Temp; end; Function FindAl(Str:String;var I:byte):String; var Temp:String; J:LongInt; begin Temp:=''; J:=I+length(SimAl); I:=J; while (Str[J]<>#9) do begin Temp:=Temp+Str[J]; Inc(J); end; FindAl:=Temp; end; Procedure InPutData(var Rab :InPut);//sozdanije fajla s max i min godom, max koli4estvo albomov i minimalnim kol-vo albomov var i:byte; Str:String; Year,AlCount:String; begin ReadLn(T,Str); Str:=Str+#9; WriteLn(Str); i:=1; while i<=length(Str) do begin If Str[i]='#' then Year:=FindYear(Str,i); If Str[i]='*' then AlCount:=FindAl(Str,i); inc(i); end; With Rab do begin If StrToInt(Rab.YearMax)<StrToInt(Year) then Rab.YearMax:=Year; If StrToInt(Rab.YearMin)>StrToInt(Year) then Rab.YearMin:=Year; If StrToInt(Rab.AlbumMax)<StrToInt(AlCount) then Rab.AlbumMax:=AlCount; If StrToInt(Rab.AlbumMin)>StrToInt(AlCount) then Rab.AlbumMin:=AlCount; end; Write(F,Rab); end; Begin ClrScr; Assign(T,TxtFile); Reset(T); Initial(D); While Not EoF(T) do begin Assign(F,AuxiliaryF); reset(f); InPutData(D); close(f); end; Close(T); End.
Объяснение кода листинга программы
- Объединение строк с помощью оператора
+. - Использование функции StrToInt для преобразования строк в целые числа.
- Использование функций FindYear и FindAl для поиска года и названия альбома соответственно.
- Использование цикла while для чтения строки из файла до тех пор, пока не будет достигнут символ
#. - Использование условного оператора If для установки значений переменных Year и AlCount.
- Использование цикла while для чтения строк из файла до тех пор, пока не будет достигнут символ
#. - Использование условного оператора If для установки значений переменных Rab.YearMax, Rab.YearMin, Rab.AlbumMax и Rab.AlbumMin.
- Запись обновленных данных обратно в файл.
- Повторение процесса до тех пор, пока не будет достигнут конец файла.
- Закрытие файла после завершения чтения.