Moglibyście sprawdzić ten kod, bo kompilować się kompiluje, ale zaraz wyskakuje błąd.
Podaj treść błędu łaskawy Panie...
s:string[100];
Kolejny zły nawyk ze starego Pascala... Używaj po prostu typu String, bo nigdy nie wiadomo jaką długość będzie miała pobrana z pliku linijka tekstu; I w ogóle same problemy przez to są, więc nie ma co kombinować, oszczędzać pamięci (tylko pozornie) itd.;
Po pierwsze - korzystaj z bloków Try Finally - zabezpieczysz się przed wyciekami pamięci:
var
tfInput, tfOutput: TextFile;
begin
AssignFile(tfInput, 'C:\Input.txt');
AssignFile(tfOutput, 'C:\Output.txt');
Reset(tfInput);
ReWrite(tfOutput);
try
finally
CloseFile(tfInput);
CloseFile(tfOutput);
end;
end.
Po drugie - wystarczy jedna pętla While z jednym warunkiem Eof:
var
tfInput, tfOutput: TextFile;
begin
AssignFile(tfInput, 'C:\Input.txt');
AssignFile(tfOutput, 'C:\Output.txt');
Reset(tfInput);
ReWrite(tfOutput);
try
while not EoF(tfInput) do
begin
end;
finally
CloseFile(tfInput);
CloseFile(tfOutput);
end;
end.
Teraz wystarczy pobrać całą linię z pliku źródłowego, zamienienie znaków i zapisanie jej do pliku docelowego; Przy czym zamianę wielkości znaków możesz oprzeć o porównania ze zbiorem (unikniesz dwóch warunków), a do samej zamiany procedur Inc i Dec:
var
tfInput, tfOutput: TextFile;
strLine: AnsiString;
intToken: Integer;
begin
AssignFile(tfInput, 'Input.txt');
AssignFile(tfOutput, 'Output.txt');
Reset(tfInput);
ReWrite(tfOutput);
try
while not EoF(tfInput) do
begin
ReadLn(tfInput, strLine);
for intToken := 1 to Length(strLine) do
if strLine[intToken] in [#65 .. #90] then
Inc(strLine[intToken], 32)
else
if strLine[intToken] in [#97 .. #122] then
Dec(strLine[intToken], 32);
WriteLn(tfOutput, strLine);
end;
finally
CloseFile(tfInput);
CloseFile(tfOutput);
end;
end.
Ewentualnie możesz jeszcze skorzystać z instrukcji wyboru Case Of, przy sprawdzaniu kodu znaku:
var
tfInput, tfOutput: TextFile;
strLine: AnsiString;
intToken: Integer;
begin
AssignFile(tfInput, 'Input.txt');
AssignFile(tfOutput, 'Output.txt');
Reset(tfInput);
ReWrite(tfOutput);
try
while not EoF(tfInput) do
begin
ReadLn(tfInput, strLine);
for intToken := 1 to Length(strLine) do
case strLine[intToken] of
#65 .. #90: Inc(strLine[intToken], 32);
#97 .. #122: Dec(strLine[intToken], 32);
end;
WriteLn(tfOutput, strLine);
end;
finally
CloseFile(tfInput);
CloseFile(tfOutput);
end;
end.
I to by było na tyle; Pamiętaj, aby kod był zawsze ładnie sformatowany, wcięcia i puste linie zawsze wstawione sensownie, a także aby zmienne/stałe/typy itd. były nazwa także sensownie; No i używaj namiętnie Shift
u, bo "PascalCase" należy zachować; Co do notacji węgierskiej to zdania są podzielone, ja jednak używam jej, bo kod jest bardziej czytelny i można wiele zmiennych nazwać tak samo, jedynie z innym prefiksem.