Thread View: pl.comp.lang.pascal
20 messages
20 total messages
Started by Andrzej
Sun, 03 Feb 2008 22:34
eoln w FP
Author: Andrzej
Date: Sun, 03 Feb 2008 22:34
Date: Sun, 03 Feb 2008 22:34
31 lines
1515 bytes
1515 bytes
Witam grupowiczów
Mam zonka :(
Program przed każdą linijką tekstu (ze zwykłego pliku txt) ma wstawić !
Var
plika,plikb:text; zn:char;
Begin
Assign (plika,'do_wczytania'); Reset (plika);
Assing (plikb,'wynikowy'); ReWrite (plikb)
While not eof (plika) Do
Begin
Write (plikb,"!");
While not eoln (plika) Do Begin Read (plika,zn); Write (plikb,zn) End;
End;
Close (plika); Close (plikb);
End.
Plik wynikowy powinien wyglądać:
!teksty
!teksty
!teksty
A wygląda:
!teksty!
teksty!!
teksty!! i tak do konca... :(
--
Co źle robię albo myślę ?
Pozdrawiam
Kura
Re: eoln w FP
Author: Łukasz 'Maly' Ostrowski
Date: Mon, 04 Feb 2008 01:47
Date: Mon, 04 Feb 2008 01:47
59 lines
1879 bytes
1879 bytes
Andrzej wrote:
> Witam grupowiczów
>
> Mam zonka :(
> Program przed każdą linijką tekstu (ze zwykłego pliku txt) ma
> wstawić !
> <ciach>
Wyjątkowo bezsensowne podejście, czytaj całymi liniami tekst.
> Plik wynikowy powinien wyglądać:
> !teksty
> !teksty
> !teksty
>
> A wygląda:
> !teksty!
> teksty!!
> teksty!! i tak do konca... :(
Zobacz to:
var
plika,plikb:text;
line:string;
begin
Assign(plika,'do_wczytania');
Reset(plika);
Assign(plikb,'wynikowy');
ReWrite (plikb);
while not eof(plika) Do
begin
ReadLn(plika,line);
WriteLn(plikb,'!',line);
end;
Close(plika);
Close(plikb);
end.
do_wczytania:
dlknfsadlkn fsdf' asdfk nasdf
asdf lasdjf laskd fas
df asmdf nkasdlfk asd
fasdlfj basdkj fasd
wynikowy:
!dlknfsadlkn fsdf' asdfk nasdf
!asdf lasdjf laskd fas
!df asmdf nkasdlfk asd
!fasdlfj basdkj fasd
--
Pozdrawiam,
Łukasz 'Maly' Ostrowski.
http://maly.nemo.pl/
Re: eoln w FP
Author: Andrzej
Date: Mon, 04 Feb 2008 08:13
Date: Mon, 04 Feb 2008 08:13
18 lines
1625 bytes
1625 bytes
Użytkownik "Łukasz 'Maly' Ostrowski" <maly@USUNnemo.pl> napisał w wiadomości news:fo5qu0$vp3$1@news.dialog.net.pl... > Andrzej wrote: [ciach] > Wyjątkowo bezsensowne podejście, czytaj całymi liniami tekst. > Zobacz to: [ciach] Dzięki sliczne To dziala, program wprawdzie mial jeszcze coś pomijać przy kopiowaniu i coś zamieniać (dlatego po znaku latwiej i już tego nie rozpisywalem).bynajmniej nie wiem czemu ten eoln nie dziala jak trzeba, gdzieć przeczytalem googlując, że w FP ma problemy z "buforem" ale nie wiem czy dobrze to zakumalem. Dzięki jeszcze raz -- Pozdrawiam Kura
Re: eoln w FP
Author: Solaris
Date: Mon, 04 Feb 2008 08:47
Date: Mon, 04 Feb 2008 08:47
46 lines
1676 bytes
1676 bytes
Dnia Sun, 3 Feb 2008 23:34:46 +0100, jakże pięknego
"Andrzej" <series@na-box43.pl> wystukał co zawarte poniżej:
: Witam grupowiczów
:
: Mam zonka :(
: Program przed ka¿d± linijk± tekstu (ze zwyk³ego pliku txt) ma wstawiæ !
#v+
var
f1, f2: Text;
c: Char;
begin
assign(f1, 'dupa');
assign(f2, 'dupa2');
reset(f1);
rewrite(f2);
write(f2, #33);
while not(eof(f1)) do
begin
read(f1, c);
if not(c in [pred(#11)]) then
write(f2, c);
if (eoln(f1)) then
write(f2, succ(#9)+#33);
end;
close(f1);
close(f2);
end.
#v-
Podziękuj przynajmiej.
--
Home: admin.idns.pl (admin.thief.pl)
Linux registered user: 408584
Contact: GG#44450, solaris#idns.pl
19:16:28 -!- Platyna Erroneous Nickname
Re: eoln w FP
Author: Andrzej
Date: Mon, 04 Feb 2008 09:53
Date: Mon, 04 Feb 2008 09:53
26 lines
1622 bytes
1622 bytes
Użytkownik "Solaris" <solaris@be.inspired> napisał w wiadomości news:20080204094748.dbe37766.solaris@be.inspired... > Dnia Sun, 3 Feb 2008 23:34:46 +0100, jakże pięknego > "Andrzej" <series@na-box43.pl> wystukał co zawarte poniżej: > > : Witam grupowiczów > : > : Mam zonka :( > : Program przed ka?d? linijk? tekstu (ze zwyk3ego pliku txt) ma wstawia > ! [ciach] Pewnie, że podziękować, koncepcja dobra - chyba nawet zalapalem ;)) Niestety wynikowy robi mi się : !teksty ! !teksty ! !teksty Może to jednak coś z tym eolnem w unicie :( -- Pozdrawiam Kura
Re: eoln w FP
Author: Solaris
Date: Mon, 04 Feb 2008 10:00
Date: Mon, 04 Feb 2008 10:00
32 lines
1611 bytes
1611 bytes
Dnia Mon, 4 Feb 2008 10:53:16 +0100, jakże pięknego "Andrzej" <series@na-box43.pl> wystukał co zawarte poniżej: : Pewnie, ¿e podziêkowaæ, koncepcja dobra - chyba nawet zalapalem ;)) : Niestety wynikowy robi mi siê : : : !teksty : ! : !teksty : ! : !teksty : : Mo¿e to jednak co¶ z tym eolnem w unicie :( Ee. Mi działa. (~/tmp)-$> cat dupa2 !aa1 !bb2 !cc3 !dd4 !ee5 ! W Uniksach znak końca lini to #10 (który ja zastosowałem). Ty musisz poprawić to na #13#10. Wszechno. -- Home: admin.idns.pl (admin.thief.pl) Linux registered user: 408584 Contact: GG#44450, solaris#idns.pl 19:16:28 -!- Platyna Erroneous Nickname
Re: eoln w FP
Author: darekm
Date: Mon, 04 Feb 2008 11:17
Date: Mon, 04 Feb 2008 11:17
17 lines
1595 bytes
1595 bytes
> nie wiem czemu ten eoln nie dziala jak trzeba, gdzieć przeczytalem
> googlując, że w FP ma problemy z "buforem" ale nie wiem czy dobrze to
> zakumalem.
To nie jest problem bufora. Po prostu read(c) czyta znak po znaku bez
względu na to czy są to zwykłe litery czy znaki sterujące, a koniec
linii jest takim znakiem (a czasami dwoma). To znaczy (w Twoim
programie) jeżeli natrafisz na koniec linii (eol = true) to następnie
wysyłasz wykrzyknik na wyjście i potem jeden lub dwa znaki końca linii.
Jak juz to powinieneś wykonać sekwencję
readln - odczyt końca linii
writeln - zapis nowej linii
write('!')
Darek
Re: eoln w FP
Author: Andrzej
Date: Mon, 04 Feb 2008 11:58
Date: Mon, 04 Feb 2008 11:58
29 lines
2056 bytes
2056 bytes
Użytkownik "darekm" <darekm@emadar.com> napisał w wiadomości
news:fo6sad$55u$1@atlantis.news.tpi.pl...
>> nie wiem czemu ten eoln nie dziala jak trzeba, gdzieć przeczytalem
>> googlując, że w FP ma problemy z "buforem" ale nie wiem czy dobrze to
>> zakumalem.
> To nie jest problem bufora. Po prostu read(c) czyta znak po znaku bez
> względu na to czy są to zwykłe litery czy znaki sterujące, a koniec linii
> jest takim znakiem (a czasami dwoma). To znaczy (w Twoim programie) jeżeli
> natrafisz na koniec linii (eol = true) to następnie wysyłasz wykrzyknik na
> wyjście i potem jeden lub dwa znaki końca linii.
>
> Jak juz to powinieneś wykonać sekwencję
> readln - odczyt końca linii
> writeln - zapis nowej linii
> write('!')
Nie wiem jak - ale faktycznie to dziala :)))
While not eoln(plika) do
Begin Read (plika,zn); Write (plikb,zn); End;
Readln (plika); Wtiteln (plikb);
Write (plikb,'!');
Mialem jakieś dziwne wyobrażenie o eoln :D
Dzięki
--
Pozdrawiam
Kura
Re: eoln w FP
Author: Magda S
Date: Tue, 05 Feb 2008 22:21
Date: Tue, 05 Feb 2008 22:21
13 lines
1238 bytes
1238 bytes
Łukasz 'Maly' Ostrowski pisze: > Andrzej wrote: >> Witam grupowiczów >> >> Mam zonka :( >> Program przed każdą linijką tekstu (ze zwykłego pliku txt) ma >> wstawić ! >> <ciach> > > Wyjątkowo bezsensowne podejście, czytaj całymi liniami tekst. A jak linia będzie miała 25 GB ? Teoretycznie to przecież możliwe. Zastanów się, zanim zaczniesz komuś zarzucać bezsens.
Re: eoln w FP
Author: Daniel Janus
Date: Tue, 05 Feb 2008 22:36
Date: Tue, 05 Feb 2008 22:36
25 lines
1770 bytes
1770 bytes
Dnia 05.02.2008 Magda S <sowamagda@vp.pl> napisał/a: >>> Program przed każdą linijką tekstu (ze zwykłego pliku txt) ma >>> wstawić ! >>> <ciach> >> >> Wyjątkowo bezsensowne podejście, czytaj całymi liniami tekst. > > A jak linia będzie miała 25 GB ? Teoretycznie to przecież możliwe. Teoretycznie tak, ale takie pliki nie występują w przyrodzie, więc postawienie na prostotę implementacji zamiast "robustności" za wszelką cenę może mieć jak najbardziej sens. > Zastanów się, zanim zaczniesz komuś zarzucać bezsens. Akurat zarzucanie bezsensu dotyczyło, zdaje się, powolności czytania znak po znaku (życzę cierpliwości w oczekiwaniu na przemielenie w ten sposób tych 25 GB...) -- Daniel 'Nathell' Janus, moveat@nathell.korpus.pl, http://korpus.pl/~nathell "Chryste, chcemy czystej. Boże, coraz drożej. Panie, chcemy taniej." [JacPo]
Re: eoln w FP
Author: Łukasz 'Maly' Ostrowski
Date: Tue, 05 Feb 2008 22:55
Date: Tue, 05 Feb 2008 22:55
15 lines
1380 bytes
1380 bytes
Magda S wrote: >> Wyjątkowo bezsensowne podejście, czytaj całymi liniami tekst. > > A jak linia będzie miała 25 GB ? Teoretycznie to przecież możliwe. > Zastanów się, zanim zaczniesz komuś zarzucać bezsens. Podejście nadal bezsensowne, czytanie *znak po znaku* 25Gb jest conajmniej debilistyczne. BlockRead albo Memory-Mapped-Files pozostaje. -- Pozdrawiam, Łukasz 'Maly' Ostrowski. http://maly.nemo.pl/
Re: eoln w FP
Author: Michał Walenciak
Date: Wed, 06 Feb 2008 08:03
Date: Wed, 06 Feb 2008 08:03
26 lines
1684 bytes
1684 bytes
Andrzej wrote: > > Nie wiem jak - ale faktycznie to dziala :))) > > While not eoln(plika) do > Begin Read (plika,zn); Write (plikb,zn); End; > Readln (plika); Wtiteln (plikb); > Write (plikb,'!'); > > Mialem jakieś dziwne wyobrażenie o eoln :D > Dzięki może najprościej nie uzywaj funkcji eoln, bo tak jak juz Ci pisali, ona w pliku made by windows zareaguje, na pierwszy z dwóch znaków oznaczających koniec lini (13,10). po prostu przerywaj pętle gdy trafisz na znak o kodzie 10. bedziesz miał wtedy funkcje uniwersalna (i win i unix - patrz wypowiedź Solarisa) (co najwyzej na macu bedzie problem tam linia ma na koncu tylko 13;) ) pozdro -- Michał Walenciak, gg: 3729519, mail: Kicer86 na gmail kropka com http://kicer.elsat.net.pl
Re: eoln w FP
Author: Terrmit
Date: Wed, 06 Feb 2008 21:08
Date: Wed, 06 Feb 2008 21:08
27 lines
1873 bytes
1873 bytes
Michał Walenciak pisze: > Andrzej wrote: > > >> Nie wiem jak - ale faktycznie to dziala :))) >> >> While not eoln(plika) do >> Begin Read (plika,zn); Write (plikb,zn); End; >> Readln (plika); Wtiteln (plikb); >> Write (plikb,'!'); >> >> Mialem jakieś dziwne wyobrażenie o eoln :D >> Dzięki > > może najprościej nie uzywaj funkcji eoln, bo tak jak juz Ci pisali, ona > w pliku made by windows zareaguje, na pierwszy z dwóch znaków > oznaczających koniec lini (13,10). po prostu przerywaj pętle gdy > trafisz na znak o kodzie 10. bedziesz miał wtedy funkcje uniwersalna (i > win i unix - patrz wypowiedź Solarisa) (co najwyzej na macu bedzie > problem tam linia ma na koncu tylko 13;) ) > > pozdro > Zawsze można sprawdzać pierwsze wystąpienie znaku 10 LUB 13 i już będzie uniwersalnie także na Mac-ówce. Sławek
Re: eoln w FP
Author: Michał Walenciak
Date: Thu, 07 Feb 2008 07:28
Date: Thu, 07 Feb 2008 07:28
21 lines
1731 bytes
1731 bytes
Terrmit wrote: >> może najprościej nie uzywaj funkcji eoln, bo tak jak juz Ci pisali, >> ona w pliku made by windows zareaguje, na pierwszy z dwóch znaków >> oznaczających koniec lini (13,10). po prostu przerywaj pętle gdy >> trafisz na znak o kodzie 10. bedziesz miał wtedy funkcje uniwersalna >> (i win i unix - patrz wypowiedź Solarisa) (co najwyzej na macu bedzie >> problem tam linia ma na koncu tylko 13;) ) >> >> pozdro >> > Zawsze można sprawdzać pierwsze wystąpienie znaku 10 LUB 13 > i już będzie uniwersalnie także na Mac-ówce. > tak ale wtedy nadal pozostaje "problem" z podwójnym znakiem konca lini w win :) -- Michał Walenciak, gg: 3729519, mail: Kicer86 na gmail kropka com http://kicer.elsat.net.pl
Re: eoln w FP
Author: Terrmit
Date: Thu, 07 Feb 2008 08:28
Date: Thu, 07 Feb 2008 08:28
20 lines
1855 bytes
1855 bytes
Michał Walenciak pisze: > Terrmit wrote: > >>> może najprościej nie uzywaj funkcji eoln, bo tak jak juz Ci pisali, >>> ona w pliku made by windows zareaguje, na pierwszy z dwóch znaków >>> oznaczających koniec lini (13,10). po prostu przerywaj pętle gdy >>> trafisz na znak o kodzie 10. bedziesz miał wtedy funkcje uniwersalna >>> (i win i unix - patrz wypowiedź Solarisa) (co najwyzej na macu bedzie >>> problem tam linia ma na koncu tylko 13;) ) >>> >>> pozdro >>> >> Zawsze można sprawdzać pierwsze wystąpienie znaku 10 LUB 13 >> i już będzie uniwersalnie także na Mac-ówce. >> > > tak ale wtedy nadal pozostaje "problem" z podwójnym znakiem konca lini w > win :) > if drugi znak = 13 LUB 10 then zignorować :)
Re: eoln w FP
Author: Tygrys
Date: Sat, 09 Feb 2008 09:12
Date: Sat, 09 Feb 2008 09:12
29 lines
2106 bytes
2106 bytes
Terrmit pisze: > Michał Walenciak pisze: >> Terrmit wrote: >> >>>> może najprościej nie uzywaj funkcji eoln, bo tak jak juz Ci pisali, >>>> ona w pliku made by windows zareaguje, na pierwszy z dwóch znaków >>>> oznaczających koniec lini (13,10). po prostu przerywaj pętle gdy >>>> trafisz na znak o kodzie 10. bedziesz miał wtedy funkcje uniwersalna >>>> (i win i unix - patrz wypowiedź Solarisa) (co najwyzej na macu bedzie >>>> problem tam linia ma na koncu tylko 13;) ) >>>> >>>> pozdro >>>> >>> Zawsze można sprawdzać pierwsze wystąpienie znaku 10 LUB 13 >>> i już będzie uniwersalnie także na Mac-ówce. >>> >> >> tak ale wtedy nadal pozostaje "problem" z podwójnym znakiem konca lini w >> win :) >> > if drugi znak = 13 LUB 10 then zignorować :) To nie takie proste, bo możesz zignorować pustą linię w niektórych przypadkach. Coś w stylu if (drugi znak = 10 and pierwszy znak = 13) or (odwrotnie) then zignorować Tygrys
Re: eoln w FP
Author: Terrmit
Date: Sat, 09 Feb 2008 19:38
Date: Sat, 09 Feb 2008 19:38
22 lines
1954 bytes
1954 bytes
Tygrys pisze: > Terrmit pisze: [ciach] >> if drugi znak = 13 LUB 10 then zignorować :) > > To nie takie proste, bo możesz zignorować pustą linię w niektórych > przypadkach. > > Coś w stylu if (drugi znak = 10 and pierwszy znak = 13) or (odwrotnie) > then zignorować No tak, masz rację. Trzeba by to dokładniej przemyśleć, ale oczywiście da się zrobić. Bo jeśli pierwszy i drugi znak jest równy 10 lub pierwszy i drugi = 13, to znaczy, że jest to pusty wiersz, A jeśli pierwszy znak =10 a drugi 13 (lub odwrotnie) to znaczy, że koniec wiersza oznaczony jest dwoma znakami. Chociaż najprościej byłoby najpierw wybadać jaki typ końca wiersza występuje w pliku, a potem zastosować odpowiednią do tego procedurę. > > Tygrys Sławek
Re: eoln w FP
Author: Andrzej
Date: Thu, 21 Feb 2008 08:40
Date: Thu, 21 Feb 2008 08:40
20 lines
1749 bytes
1749 bytes
Użytkownik "Łukasz 'Maly' Ostrowski" <maly@USUNnemo.pl> napisał w wiadomości news:foapin$6i2$1@news.dialog.net.pl... > Magda S wrote: >>> Wyjątkowo bezsensowne podejście, czytaj całymi liniami tekst. >> >> A jak linia będzie miała 25 GB ? Teoretycznie to przecież możliwe. >> Zastanów się, zanim zaczniesz komuś zarzucać bezsens. > > > Podejście nadal bezsensowne, czytanie *znak po znaku* 25Gb jest > conajmniej debilistyczne. BlockRead albo Memory-Mapped-Files > pozostaje. To czy program działa poprawnie to jedno... optymalizacja kodu, to drugie ;)) Na szczęście obrabiany plik liczy się b. w KB niż PB :) Dzięki za wskazówki -- Pozdrawiam Kura
Re: eoln w FP
Author: Wiktor S.
Date: Fri, 22 Feb 2008 11:09
Date: Fri, 22 Feb 2008 11:09
53 lines
2704 bytes
2704 bytes
>>> if drugi znak = 13 LUB 10 then zignorować :)
>>
>> To nie takie proste, bo możesz zignorować pustą linię w niektórych
>> przypadkach.
>>
>> Coś w stylu if (drugi znak = 10 and pierwszy znak = 13) or
>> (odwrotnie) then zignorować
> No tak, masz rację. Trzeba by to dokładniej przemyśleć, ale
> oczywiście da się zrobić. Bo jeśli pierwszy i drugi znak jest
> równy 10 lub pierwszy i drugi = 13, to znaczy, że jest to pusty
> wiersz, A jeśli pierwszy znak =10 a drugi 13 (lub odwrotnie)
> to znaczy, że koniec wiersza oznaczony jest dwoma znakami.
niesprawdzane:
var stan:(stan_byl_inny,stan_byl_13,stan_byl_10);
stan:=stan_byl_inny;
while sa_jeszcze_znaki do
begin
c:=dawaj_znak();
case c of
#13 : begin
case stan of
stan_byl_inny,
stan_byl_13 : nowa_linia;
stan_byl_10 : wtf; // #10#13
end;
stan:=stan_byl_13;
end;
#10 : begin
case stan of
stan_byl_inny,
stan_byl_10 : nowa_linia;
stan_byl_13 : ; // #13#10
end;
stan:=stan_byl_10;
end;
else begin
normalny_znak(c);
stan:=stan_byl_inny;
end;
end;
end;
--
Azarien
"Kasyna nie oszukują. Jedyną obroną kasyna jest absolutna uczciwość.
Gdyby oszukiwały, ktoś mógłby dostrzedz metodę oszusta - i ograć kasyno."
Re: eoln w FP
Author: Remek
Date: Fri, 14 Mar 2008 02:32
Date: Fri, 14 Mar 2008 02:32
22 lines
2144 bytes
2144 bytes
Użytkownik "Terrmit" napisał: > Bo jeśli pierwszy i drugi znak jest > równy 10 lub pierwszy i drugi = 13, to znaczy, że jest to pusty > wiersz, A jeśli pierwszy znak =10 a drugi 13 (lub odwrotnie) > to znaczy, że koniec wiersza oznaczony jest dwoma znakami. Co za herezje ludzie potrafią wypisywać! Skąd Ty czerpiesz taką wiedzę? Koniec wiersza nie jest w żaden sposób znakowany (zakładam, że mowa o pliku *.txt w Windows). Jeśli na końcu wiersza wciśniesz Enter, wtedy kursor zostanie przeniesiony do następnego wiersza i dopiero wtedy w pliku pojawią się dwa znaki - 0D0A (hex), tzn. powrót karetki i początek nowej linii. > Chociaż najprościej byłoby najpierw wybadać jaki typ końca > wiersza występuje w pliku, a potem zastosować odpowiednią do > tego procedurę. Wystarczy podejrzeć plik tekstowy w hexedytorze. Zresztą w Windows zawsze będzie tak jak napisałem, ponieważ EOL jest dwubajtowy. Remek
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads