Ĺadny brzuch
Witam, mam stworzyć do szkoły program, który ma na celu przepisanie z jednego dokumentu tekstowego wszystkiego z równoczesnym usunięciem polskich znaków i zapisanie do drugiego. Plik wyjściowy miałby wyglądać tak: aaassss, przy pliku wejściowym: ąąąśśśś. Próbowałem to zrobić, lecz jednak nie działa to wogóle, znaczy działa, ale na zwykłych literach...
uses crt; const file_i = 'patch\zad_19a032007\txt_i.txt'; file_o = 'patch\zad_19a032007\txt_o.txt'; var znak : char; fi, fo : text; zmiany_a, zmiany_c, zmiany_s, zmiany_1, zmiany_z1 : byte; begin clrscr; assign (fi, file_i); assign (fo, file_o); reset (fi); rewrite (fo); while not eof (fi) do begin read (fi, znak); if znak = 'ś' then begin znak := 's'; write (fo ,znak); inc (zmiany_a); end else write (fo ,znak); end; close (fi); close (fo); end.
Kodowani pików tekstowych ustawione miałem na cp852...
N a u c z _ s i e _ s z u k a c ! ! !
11 Postow nizej masz temat... Turbo Pascal i problem z polskimi literami.!
Po kiego dajesz nowy temat dotyczacy tego samego problemu?
Użytkownik Ali240 edytował ten post 20 marzec 2007, 14:57
Tak, widziałem to wcześniej, ale nie o to chodzi. Chodzi mi o operacje na plikach, nie o program, że nie ma polskich znaków wyświetlanych na konsoli...
PS. Więc to nie jest TEN sam problem. I jak możesz usuń ten czerwony, bo aż oczy bolą...
Tak, widziałem to wcześniej, ale nie o to chodzi. Chodzi mi o operacje na plikach, nie o program, że nie ma polskich znaków wyświetlanych na konsoli...
PS. Więc to nie jest TEN sam problem. I jak możesz usuń ten czerwony, bo aż oczy bolą...
A w plikach rowniez sotsujesz ta sama strone kodowa?
//edit
Chyba jednak problemy sa powiazane. U mnie program dziala jak najbardziej dobrze...
Użytkownik Ali240 edytował ten post 20 marzec 2007, 15:02
Oczywiście, że tak... dokładnie 852.
Oczywiście, że tak... dokładnie 852.
No to moje szczere gratulacje. W pliku masz 852 a porownojesz z 'ś' ktore jest z cp-1250...
Kiedy zaczniesz czytać dokładnie moje posty? Hmm?
Kodowani pików tekstowych ustawione miałem na cp852...
>chcp Aktywna strona kodowa: 852
Napisałem to już na samym początku :D
Użytkownik sherszen edytował ten post 20 marzec 2007, 15:18
if znak = 'ś' then
Rozumiem w takim razie ze to ś u siebie masz w cp852? Bo przegladarki nie konwertuja automatycznie na iso-8852 z cp852 a tutaj widac wyraznie 'ś' czyli bazowo podales w cp-1250 lub iso-8852. Chyba ze masz recznie skonfigurowana przegladarke. Ale skoro juz masz to w takim samym kodowaniu co w pliku (choc skoro nie dziala to nie sadze...), to daj prosze zrodlo programu i plik wejsciowy oryginalnie kodowane.
Kod przerobiony na szybko dla diagnostyki. Polecam sobie odpalic...
program test; uses crt; const file_i = 'test.txt'; file_o = 'test_o.txt'; var znak : char; fi, fo : text; zmiany_a, zmiany_c, zmiany_s, zmiany_1, zmiany_z1 : byte; begin clrscr; assign (fi, file_i); assign (fo, file_o); reset (fi); rewrite (fo); while not eof (fi) do begin read (fi, znak); if znak = 'ś' then begin writeln('Zamieniam "',znak,'"=',ord(znak),' na s'); znak := 's'; write (fo ,znak); inc (zmiany_a); end else begin if (znak<>#13) and (znak<>#10) then begin writeln('Pozostawiam znak "',znak,'"=',ord(znak)); end else begin writeln('Pozostawiam #',ord(znak)); end; write (fo ,znak); end; end; close (fi); close (fo); readln; end.
Użytkownik Ali240 edytował ten post 20 marzec 2007, 15:20
Pozwoliłem sobie zmienić lekko zadanie, najwyżej jakoś wytłumaczę to :D
Kod w tej chwili wygląda tak:
program zad_19a032007; uses crt; const file_i = 'txt_i.txt'; file_o = 'txt_o.txt'; var znak, wybor : char; tekst : string; fi, fo : text; zmiany_a, zmiany_c, zmiany_s, zmiany_1, zmiany_z1 : byte; begin clrscr; assign (fi, file_i); //tworzenie pliku tekstowego rewrite (fi); //nadpisanie istniejacego pliku writeln ('Tworzenie pliku tekstowego: '); repeat readln (tekst); //wczytanie tekstu od uzytkownika if tekst<>'' then writeln (fi, tekst); until tekst = ''; close (fi); //zamkniecie pliku wjsciowego assign (fi, file_i); //ponowne użycie pliku w trybie tlyko do odczytu reset (fi); assign (fo, file_o); rewrite (fo); while not eof (fi) do //zamienianie polskich znakow begin read (fi ,znak); if znak = 'ś' then //zamiana ś na s begin znak := 's'; write (fo ,znak); inc (zmiany_a); end else write (fo ,znak); end; close (fi); close (fo); writeln ('Zapis wykonany pomyślnie!'); writeln ('Liczba wprowadzonych zmian: ',zmiany_a); writeln ('Wyświetlić utworzony plik? T/N'); wybor := readkey; if upcase(wybor) = 'T' then begin assign (fo, file_o); reset (fo); while not eof (fo) do begin read (fo, znak); write (znak); end; readkey end; close (fo); writeln ('Press any key to EXIT...'); end.
I co Ci nie dziala? Nie rozumiem problemu w ogole. Napisalem juz ze wszystko ladnie dziala jak odpowiednio if'a sie poprawi dla okreslonej strony kodowej...
Działa, ale plik tworzę bezpośrednio z Pascala... Jeszcze tylko, zagnieżdżę instrukcje i będzie koniec....
Użytkownik sherszen edytował ten post 20 marzec 2007, 20:36
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
uses crt; const file_i = 'patch\zad_19a032007\txt_i.txt'; file_o = 'patch\zad_19a032007\txt_o.txt'; var znak : char; fi, fo : text; zmiany_a, zmiany_c, zmiany_s, zmiany_1, zmiany_z1 : byte; begin clrscr; assign (fi, file_i); assign (fo, file_o); reset (fi); rewrite (fo); while not eof (fi) do begin read (fi, znak); if znak = 'ś' then begin znak := 's'; write (fo ,znak); inc (zmiany_a); end else write (fo ,znak); end; close (fi); close (fo); end.
Kodowani pików tekstowych ustawione miałem na cp852...
N a u c z _ s i e _ s z u k a c ! ! !
11 Postow nizej masz temat... Turbo Pascal i problem z polskimi literami.!
Po kiego dajesz nowy temat dotyczacy tego samego problemu?
Użytkownik Ali240 edytował ten post 20 marzec 2007, 14:57
Tak, widziałem to wcześniej, ale nie o to chodzi. Chodzi mi o operacje na plikach, nie o program, że nie ma polskich znaków wyświetlanych na konsoli...
PS. Więc to nie jest TEN sam problem. I jak możesz usuń ten czerwony, bo aż oczy bolą...
Tak, widziałem to wcześniej, ale nie o to chodzi. Chodzi mi o operacje na plikach, nie o program, że nie ma polskich znaków wyświetlanych na konsoli...
PS. Więc to nie jest TEN sam problem. I jak możesz usuń ten czerwony, bo aż oczy bolą...
A w plikach rowniez sotsujesz ta sama strone kodowa?
//edit
Chyba jednak problemy sa powiazane. U mnie program dziala jak najbardziej dobrze...
Użytkownik Ali240 edytował ten post 20 marzec 2007, 15:02
Oczywiście, że tak... dokładnie 852.
Oczywiście, że tak... dokładnie 852.
No to moje szczere gratulacje. W pliku masz 852 a porownojesz z 'ś' ktore jest z cp-1250...
Kiedy zaczniesz czytać dokładnie moje posty? Hmm?
Kodowani pików tekstowych ustawione miałem na cp852...
>chcp Aktywna strona kodowa: 852
Napisałem to już na samym początku :D
Użytkownik sherszen edytował ten post 20 marzec 2007, 15:18
if znak = 'ś' then
Rozumiem w takim razie ze to ś u siebie masz w cp852? Bo przegladarki nie konwertuja automatycznie na iso-8852 z cp852 a tutaj widac wyraznie 'ś' czyli bazowo podales w cp-1250 lub iso-8852. Chyba ze masz recznie skonfigurowana przegladarke. Ale skoro juz masz to w takim samym kodowaniu co w pliku (choc skoro nie dziala to nie sadze...), to daj prosze zrodlo programu i plik wejsciowy oryginalnie kodowane.
Kod przerobiony na szybko dla diagnostyki. Polecam sobie odpalic...
program test; uses crt; const file_i = 'test.txt'; file_o = 'test_o.txt'; var znak : char; fi, fo : text; zmiany_a, zmiany_c, zmiany_s, zmiany_1, zmiany_z1 : byte; begin clrscr; assign (fi, file_i); assign (fo, file_o); reset (fi); rewrite (fo); while not eof (fi) do begin read (fi, znak); if znak = 'ś' then begin writeln('Zamieniam "',znak,'"=',ord(znak),' na s'); znak := 's'; write (fo ,znak); inc (zmiany_a); end else begin if (znak<>#13) and (znak<>#10) then begin writeln('Pozostawiam znak "',znak,'"=',ord(znak)); end else begin writeln('Pozostawiam #',ord(znak)); end; write (fo ,znak); end; end; close (fi); close (fo); readln; end.
Użytkownik Ali240 edytował ten post 20 marzec 2007, 15:20
Pozwoliłem sobie zmienić lekko zadanie, najwyżej jakoś wytłumaczę to :D
Kod w tej chwili wygląda tak:
program zad_19a032007; uses crt; const file_i = 'txt_i.txt'; file_o = 'txt_o.txt'; var znak, wybor : char; tekst : string; fi, fo : text; zmiany_a, zmiany_c, zmiany_s, zmiany_1, zmiany_z1 : byte; begin clrscr; assign (fi, file_i); //tworzenie pliku tekstowego rewrite (fi); //nadpisanie istniejacego pliku writeln ('Tworzenie pliku tekstowego: '); repeat readln (tekst); //wczytanie tekstu od uzytkownika if tekst<>'' then writeln (fi, tekst); until tekst = ''; close (fi); //zamkniecie pliku wjsciowego assign (fi, file_i); //ponowne użycie pliku w trybie tlyko do odczytu reset (fi); assign (fo, file_o); rewrite (fo); while not eof (fi) do //zamienianie polskich znakow begin read (fi ,znak); if znak = 'ś' then //zamiana ś na s begin znak := 's'; write (fo ,znak); inc (zmiany_a); end else write (fo ,znak); end; close (fi); close (fo); writeln ('Zapis wykonany pomyślnie!'); writeln ('Liczba wprowadzonych zmian: ',zmiany_a); writeln ('Wyświetlić utworzony plik? T/N'); wybor := readkey; if upcase(wybor) = 'T' then begin assign (fo, file_o); reset (fo); while not eof (fo) do begin read (fo, znak); write (znak); end; readkey end; close (fo); writeln ('Press any key to EXIT...'); end.
I co Ci nie dziala? Nie rozumiem problemu w ogole. Napisalem juz ze wszystko ladnie dziala jak odpowiednio if'a sie poprawi dla okreslonej strony kodowej...
Działa, ale plik tworzę bezpośrednio z Pascala... Jeszcze tylko, zagnieżdżę instrukcje i będzie koniec....
Użytkownik sherszen edytował ten post 20 marzec 2007, 20:36