Chciałbym zapisać do pliku dwu-znakowe wyrażenie np. ‘A1’
ale niestety nie jest to takie proste.
Aby program działał musiałem utworzyć zmienną typu string : A1.
c:char
kawałek kodu (program ma zamieniać wczytany znak z pliku 1 na inne wyrażenie do pliku 2)
np. wczytane “a” ma zapisać na “A1”, a “b” na “B1”
while not eof(f1) do
begin
read(f1,c);
if c='a' then
write(f2,A1[1],A1[2]) //tylko w takim wypadku działa, ale jeśli zrobię: write(f2,A1) to wyskakuje: Error 26: Type mismatch
else
begin
if c='b' then
write(f2,'B','1') //lub write(f2,'B1') również nie działa, w obu przypadkach Error 20: Variable identifier expected
end;
end;
Czy tylko tym jednym sposobem można zapisać coś do pliku? Co jest nie tak?
Ułatwiłoby mi to życie gdybym ręcznie mógł podać co ma zostać tam wpisane w takim a takim wypadku.
Podejrzewam, że problem występuje ze zmiennymi - pewnie jakoś się gryzą
Dzięki, nieco mnie to naprowadziło, ale mam pytania:
-jeśli “użyłem do przypisania” plików “:FILE OF CHAR” to mogę zapisywać w nich tylko po 1 znaku na raz?
-czy zmienna typu “text” jest jakoś ograniczona (w sensie długości znaków), np. tak jak string?
A i mam taki jeszcze mały problem: używam Windows 7, jeśli chcę odczytać (bądź zapisać) plik z partycji systemowej (C:), to wywala mi błąd, że nie może go znaleźć - da się to jakoś ominąć bez zmieniania uprawnień?
Program p1;
Uses crt;
var plik : text;
st : string;
Begin
clrscr;
assign(plik,'C:\test.txt');
reset(plik);
while not eof(plik) do
begin
readln(plik,st);
writeln(st);
end;
readln;
End.
Uważam, że do odczytu pliku tekstowego, czy zapisu nie są potrzebne uprawnienia administratora. Można to sprawdzić w cmd.exe lub PowerShell.exe poleceniem copy lub xcopy, w przypadku xcopy może faktycznie wystąpić odmowa dostępu, jeżeli nie ma się najwyższych praw w systemie.
Protected_48 , ja aktualnie używam Turbo Pascala, ten Twój powyższy program na nim działa i czyta z dysku C, a w moim nie : >
Różnicą jest tylko to, że u mnie muszę wprowadzić ścieżkę…
readln(sciezkaod); //sciezkaod:string
writeln;
Writeln('File path is now: ',sciezkaod);
writeln;
licznik:=0;
Assign(f1,sciezkaod);
{$I-}
reset(f1);
{$I+}
if IOResult<>0 then begin Writeln('File Wasnt Found! Program will be close.'); delay(4000); halt; end;
Masz jeszcze jakiś pomysł? Z kolei kod programu nie działa na Freepascalu, a pewnie trochę musiałbym przerobić.
Posiadasz Windows’a 7, a używasz TP? Wiesz na twoim miejscu proponowałbym przesiąść się całkowicie na FPC.
Zmieniłem ten mój “program” tak, żeby pobierał ścieżkę od “użytkownika”. Wygląda to tak :
Program p1;
Uses crt;
var plik : text;
st,sc : string;
Begin
clrscr;
writeln('Podaj sciezke pliku, ktory chcesz odczytac : ');
readln(sc);
assign(plik,sc);
{$I-}
reset(plik);
{$I+}
if IOResult<>0 then
writeln('Plik nie istnieje')
else
writeln('Plik istnieje');
while not eof(plik) do
begin
readln(plik,st);
writeln(st);
end;
readln;
End.
Nie wiem, jak wprowadzasz ścieżkę. Powinno się podawać również rozszerzenie pliku C:\test.txt oraz normalne jest, że program wyjdzie z błędem 103, w przypadku błędnego otwarcia, znaczy wydaje się że mi pokazywano, jak tego uniknąć, jednak nie pamiętam, albo wydaje się mi że to jest możliwe. Zwracane wartości IOResult :