Výsledky 1 až 14 z 14

Téma: [pascal] Jak zjistit 2x eoln(f) pri cteni z textaku

  1. #1

    Standardní [pascal] Jak zjistit 2x eoln(f) pri cteni z textaku

    Nacitam text ze souboru znak po znaku (je to nutne k vyreseni jedne ulohy) a potrebuju zjistit, jestli nebyly dva konce radku za sebou. Jak na to?
    Brum brum, nezavazne...

  2. #2

    Standardní

    Napisu to obecne, do pascalu to snad neni uz problem presat

    Kód:
    char c,last;
    
    do {
    c=cti_znak();
    if (c=eoln AND last=eoln)
     { 
       // tady co chce provest pri dvou eoln po sobe
     }
    // tady co provadis normalne
    last=c;
    }while(eof);
    Psal jsem to rychle ale idea z toho je snad jasna

  3. #3

    Standardní

    Dik, ale tohle jsem tak nejak zkousel, problem je v tom, ze pri cteni ze souboru je eoln(f) booleovska hodnota a kdyz jsem si dal jeji hodnotu do watche, tak se pri cteni znak po znaku vubec nemenila. A protoze je to booleovska hodnota, kontroloval jsem ji vzdy po nacteni znaku, znak sam se ale eoln imho rovnat nemuze. Napada me snad leda reagovat na sekvenci dvojic znaku #13, #10 (tyhle dva prave konci radek)...
    Brum brum, nezavazne...

  4. #4

    Standardní

    Alebo citaj cele riadky (readln) do stringu a z neho to mozes potom spracuvat po znakoch. A ked budu dva entery, tak dostanes prazdny string.
    1: Asus P2B 1.10 • Celeron 1100@1364/1.8V • 512MB SDRAM • Samsung SP1213N+WD AC28400 • Toshiba XM-6402B+SD-M1212 • PowerColor AR2L Radeon 9100 64MB • 3C900-Combo • Bt848A • ASB-3940UA • AWE-64 • DTK PTP-3007 • VisionMaster 405 • Umax UC630 • Star LC24-200 Colour 2: PCPartner TXB820DS • Cyrix MII PR300/1.8V • 256MB SDRAM • 2xSamsung HD400LD+IT8212F • Accesstek CW4001 • LS-120 • Mystique 4MB • Millennium II 4MB • 3C509 • CMI8329A+Dream MIDI • ADI ProVista E44 • SyncMaster 203B Notebook: DTK FortisPro TOP-5A • P166MMX/1.8V • 80MB EDO • Hitachi 5K80 40GB • 12,1" TFT Router: A-Trend ATC-1425B • i486DX 50@33/5V • 48MB FPM • WD AC14300 • UMC UM9003F • HP PC LAN 16/TP+ Car: Mazda 323P BA • Z5 1489ccm, 65kW@5500rpm, 134Nm@4000rpm

  5. #5

    Standardní

    Rainbow, dik za radu, tohle jsem uz vlastne taky zkousel, problem je v tom, ze v zadani byla dana i moznost velmi dlouheho radku ve vstupnim souboru, pak je tusim problem s omezenim velikosti stringu.
    Brum brum, nezavazne...

  6. #6

    Standardní

    Citace Původně odeslal Fx
    Rainbow, dik za radu, tohle jsem uz vlastne taky zkousel, problem je v tom, ze v zadani byla dana i moznost velmi dlouheho radku ve vstupnim souboru, pak je tusim problem s omezenim velikosti stringu.
    Tak to cti binarne a hlidej CRLF dvakrat po sobe (DOS konec).
    ITF FreeNet Liberec

  7. #7

    Standardní

    String moze mat max. 255 znakov, takze ak tam moze byt dlhsi riadok, neda sa to pouzit.
    Dlzku riadku si mozes pocitat aj rucne - pri kazdom znaku ju zvysis (okrem CR a LF), ked dojdes na CR a LF, tak skontrolujes, ci nie je nulova (vtedy boli 2 entery za sebou) a vynulujes.
    1: Asus P2B 1.10 • Celeron 1100@1364/1.8V • 512MB SDRAM • Samsung SP1213N+WD AC28400 • Toshiba XM-6402B+SD-M1212 • PowerColor AR2L Radeon 9100 64MB • 3C900-Combo • Bt848A • ASB-3940UA • AWE-64 • DTK PTP-3007 • VisionMaster 405 • Umax UC630 • Star LC24-200 Colour 2: PCPartner TXB820DS • Cyrix MII PR300/1.8V • 256MB SDRAM • 2xSamsung HD400LD+IT8212F • Accesstek CW4001 • LS-120 • Mystique 4MB • Millennium II 4MB • 3C509 • CMI8329A+Dream MIDI • ADI ProVista E44 • SyncMaster 203B Notebook: DTK FortisPro TOP-5A • P166MMX/1.8V • 80MB EDO • Hitachi 5K80 40GB • 12,1" TFT Router: A-Trend ATC-1425B • i486DX 50@33/5V • 48MB FPM • WD AC14300 • UMC UM9003F • HP PC LAN 16/TP+ Car: Mazda 323P BA • Z5 1489ccm, 65kW@5500rpm, 134Nm@4000rpm

  8. #8

    Standardní

    Citace Původně odeslal hwsoft
    Citace Původně odeslal Fx
    Rainbow, dik za radu, tohle jsem uz vlastne taky zkousel, problem je v tom, ze v zadani byla dana i moznost velmi dlouheho radku ve vstupnim souboru, pak je tusim problem s omezenim velikosti stringu.
    Tak to cti binarne a hlidej CRLF dvakrat po sobe (DOS konec).
    Presne to jsem myslel temi znaky #13 a #10 (=CR a LF). Ted jsem dorazil domu, tak to prubnu, budu kvuli tomu ale muset ty procedury, co jsem mel hotovy, uplne prekopat. Ach jo
    Brum brum, nezavazne...

  9. #9
    Senior Member
    Založen
    21.10.2002
    Bydliště
    Liberec
    Příspěvky
    517
    Vliv
    282

    Standardní

    Nevim co ti na tom nejde. S tim eoln(f) ti to musi fungovat, podle helpu eoln(f) je true pokud pozice v souboru je na konci radku nebo pokud je eof(f) true. Pri cteni znaku po znaku se eoln(f) nemeni a je porad false, dokud nenajedes na konec radku, pak by to melo vratit true. NAdefinuj si nejakou pomocnou promenou, na zacatku si ji nastav na false, nacti znak, zjisti jestli oeln(f) a pomocna promena sou oboje true, kdyz jo, mas za sebou 2 konce radku a podle toho neco udelej. Kdyz ne, tak zjisti jestli je eoln(f) true, v pripade ze jo, tak si nastav pomocnou promenou na true jinak na false. (zalezi teda jak to potrebujes kontrolovat, jestli kdyz budes mit konec radku za sebou 3x, jestli ti ma udelat tu akci pri 2 koncich radku za sebou 2x nebo jen jednou, jako jestli bude 2x konec radku za sebou pri 1 a 2 i pri 2 a 3, nebo jen pri 1. a 2. a 3. konec radku v rade uz se nebere).. neco jako tohle (spatlanej hnus ):

    Kód:
    tmp:=false;
    while not eof(f) do begin
      znak:=read(f);
      if eoln(f) then begin
        if tmp then begin
          // tady udelej tu akci co delas pri 2 koncich radku
        end;
        tmp:=true;
      end else begin
        tmp:=false;
        // tady co delas normalne
      end;
    end;

  10. #10

    Standardní

    MaPa: Mne by to taky prislo logicky, ale kdyz jsem zkusil proste jenom to lamat podle eoln (tj. to pole znaku vypsat, jakmile narazim na prvni eoln), tedy

    if eoln(f) then vypis_obsah_pole_po_posledni_znak;

    tak mi to naslo eoln(f) uprostred slova a vypsalo to jenom jeho kus, kdyz jsem tohle vynechal, tak se normalne do pole vlozilo...
    Brum brum, nezavazne...

  11. #11
    Senior Member
    Založen
    21.10.2002
    Bydliště
    Liberec
    Příspěvky
    517
    Vliv
    282

    Standardní

    Hmm.. to bych musel leda zkusit, doma, ted sem v praci.

  12. #12

    Standardní

    No mne to proste blbne, ja uz fakt nevim, treba mam blby nastaveni compileru... A jinak, zda se mi, ze to tvoje reseni neresi dva konce radku bezprostredne za sebou, tj. CRLFCRLF, ale proste dva konce radku, ktery oba obsahujou nejakej text... Asi jsem to na zacatku nenapsal uplne jasne
    Brum brum, nezavazne...

  13. #13
    Senior Member
    Založen
    21.10.2002
    Bydliště
    Liberec
    Příspěvky
    517
    Vliv
    282

    Standardní

    Citace Původně odeslal Fx
    A jinak, zda se mi, ze to tvoje reseni neresi dva konce radku bezprostredne za sebou, tj. CRLFCRLF, ale proste dva konce radku, ktery oba obsahujou nejakej text...
    Spravne, to se ti jen zda

  14. #14
    Senior Member
    Založen
    21.10.2002
    Bydliště
    Liberec
    Příspěvky
    517
    Vliv
    282

    Standardní

    ak sem to doma nestoh nez sem odjel na sivlestra, tak nevim jestli to potrebujes jeste, ted sem to zkousel a zjistil sem ze eoln(f) de snad jen na soubor typu TEXT, a kdyz to pak ctes po znakach tak eoln(f) je pravda po precteni posledniho znaku na radku, jenze pak ctes 2 znaky #13 a #10, takze 2x eaoln pri cteni po znaku stejne nedocilis.. jedine pri eoln(f)=true precist 2x znaky naprazdno a pak muzes zas testovat jestli je za tim hned dalsi eoln(f)... kdybys to jeste nejak potreboval tak dej vedet.

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •