🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.pascal
20 messages
20 total messages Started by Andrzej Sun, 03 Feb 2008 22:34
eoln w FP
#92439
Author: Andrzej
Date: Sun, 03 Feb 2008 22:34
31 lines
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
#92440
Author: Łukasz 'Maly' Ostrowski
Date: Mon, 04 Feb 2008 01:47
59 lines
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
#92442
Author: Andrzej
Date: Mon, 04 Feb 2008 08:13
18 lines
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
#92452
Author: Solaris
Date: Mon, 04 Feb 2008 08:47
46 lines
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
#92453
Author: Andrzej
Date: Mon, 04 Feb 2008 09:53
26 lines
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
#92454
Author: Solaris
Date: Mon, 04 Feb 2008 10:00
32 lines
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
#92443
Author: darekm
Date: Mon, 04 Feb 2008 11:17
17 lines
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
#92444
Author: Andrzej
Date: Mon, 04 Feb 2008 11:58
29 lines
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
#92446
Author: Magda S
Date: Tue, 05 Feb 2008 22:21
13 lines
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
#92449
Author: Daniel Janus
Date: Tue, 05 Feb 2008 22:36
25 lines
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
#92450
Author: Łukasz 'Maly' Ostrowski
Date: Tue, 05 Feb 2008 22:55
15 lines
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
#92432
Author: Michał Walenciak
Date: Wed, 06 Feb 2008 08:03
26 lines
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
#92436
Author: Terrmit
Date: Wed, 06 Feb 2008 21:08
27 lines
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
#92438
Author: Michał Walenciak
Date: Thu, 07 Feb 2008 07:28
21 lines
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
#92441
Author: Terrmit
Date: Thu, 07 Feb 2008 08:28
20 lines
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
#92434
Author: Tygrys
Date: Sat, 09 Feb 2008 09:12
29 lines
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
#92447
Author: Terrmit
Date: Sat, 09 Feb 2008 19:38
22 lines
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
#92451
Author: Andrzej
Date: Thu, 21 Feb 2008 08:40
20 lines
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
#92448
Author: Wiktor S.
Date: Fri, 22 Feb 2008 11:09
53 lines
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
#92445
Author: Remek
Date: Fri, 14 Mar 2008 02:32
22 lines
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