Moglibyście sprawdzić ten kod, bo kompilować się kompiluje, ale zaraz wyskakuje błąd.
Podaj treść błędu łaskawy Panie...
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:
Kopiuj
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:
Kopiuj
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:
Kopiuj
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:
Kopiuj
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 Shiftu, 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.