Tiedoston lukua

C-aloittelija

fgetcillä voidaan ilmeisesti lukea tiedostosta merkkejä. Oletetaanpa, että minulla on tiedostossa miljoona merkkiä pitkä rivi. Jos haluan lukea tiedostosta tuon rivin rivin merkki kerrallaan, niin pitääkö minun varautua jonkun laskurin ylivuotoon vai ei.

10

408

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • on tuo

      Periaatteessa kyllä, jos olet laittanut laskurin tyypin liian pieneksi. Jotenkin tähän tyyliin:

      int counter = 0;

      while (fgetc(file) != EOF)
      {
      if ( counter == INT_MAX ) {
      fputs("int overflow\n", stderr);
      abort(); // tai jotain
      }
      }

      Mutta jos counter on tyyppiä unsigned long long int, niin eipä se käytännössä voi ylivuotaa, koska on niin suuri luku (2^64 luultavasti tarkista limits.h-filusta).

      Todellinen ongelma on kerto- ja muut laskut, ja niiden tarkistus.

      • C-aloittelija

        Ajattelin vaan, kun gedit ei osaa lukea yhtä tiedostoa kunnolla ja nano pystyy sen lukemaan. Mitenkähän ongelmaa voisi alkaa debugata?


      • Herlokki Solmunen
        C-aloittelija kirjoitti:

        Ajattelin vaan, kun gedit ei osaa lukea yhtä tiedostoa kunnolla ja nano pystyy sen lukemaan. Mitenkähän ongelmaa voisi alkaa debugata?

        Ensiksi käynnistä gedit terminaalista, jolloin näet virheilmoitukset.

        Koeta rajoittaa ongelmaa:
        1) Onko kyseessä vain yksi tiedosto vai myös muut yhtä suuret tiedostot?
        2) Mikä tiedostomuoto?
        3) Mitä gedit tekee? (kaatuko tai jotain?)
        4) Ongelmallisen tiedoston koko?
        jne jne...


      • C-aloittelija
        Herlokki Solmunen kirjoitti:

        Ensiksi käynnistä gedit terminaalista, jolloin näet virheilmoitukset.

        Koeta rajoittaa ongelmaa:
        1) Onko kyseessä vain yksi tiedosto vai myös muut yhtä suuret tiedostot?
        2) Mikä tiedostomuoto?
        3) Mitä gedit tekee? (kaatuko tai jotain?)
        4) Ongelmallisen tiedoston koko?
        jne jne...

        Täytyy kokeilla. Virheilmoituksia ei tule, vaan ohjelma latoo merkkejä liian tiheään. Esiintyy kaikilla ASCII-tekstitiedostoilla, joissa on riittävän pitkä rivi, ja bugi on kuulemma gtktextview2:ssa. En vaan keksi, miten saisin selville bugin paikan. Tosiaan mulla ei ole kokemusta debuggerin käytöstä. Pitääkö ensin luoda jokin makefile kaikista lähdekooditiedostoista vai miten debuggerin saa päälle? Ja toisaalta, kun ongelma esiintyy geditissä ja sen käyttö vaatii gtksourceviewi2:a, niin pitääkö ladata koneelle kahden eri ohjelman sorsat ja kääntää ne yhdeksi ohjelmaksi? Tiedoston koko 16kB. https://bugs.launchpad.net/ubuntu/ source/gtksourceview2/ bug/134352


      • olisko fixattu jo
        C-aloittelija kirjoitti:

        Täytyy kokeilla. Virheilmoituksia ei tule, vaan ohjelma latoo merkkejä liian tiheään. Esiintyy kaikilla ASCII-tekstitiedostoilla, joissa on riittävän pitkä rivi, ja bugi on kuulemma gtktextview2:ssa. En vaan keksi, miten saisin selville bugin paikan. Tosiaan mulla ei ole kokemusta debuggerin käytöstä. Pitääkö ensin luoda jokin makefile kaikista lähdekooditiedostoista vai miten debuggerin saa päälle? Ja toisaalta, kun ongelma esiintyy geditissä ja sen käyttö vaatii gtksourceviewi2:a, niin pitääkö ladata koneelle kahden eri ohjelman sorsat ja kääntää ne yhdeksi ohjelmaksi? Tiedoston koko 16kB. https://bugs.launchpad.net/ubuntu/ source/gtksourceview2/ bug/134352

        Linkkisi mukaan bugi on jo korjattu.


      • C-aloittelija
        olisko fixattu jo kirjoitti:

        Linkkisi mukaan bugi on jo korjattu.

        Mutta gedit ei avaa tiedostoa vieläkään kunnolla. Joko korjausta ei ole paketoitu geditiin tai Ubuntuun tai sitten korjaus epäonnistui.


      • ja juu....
        C-aloittelija kirjoitti:

        Mutta gedit ei avaa tiedostoa vieläkään kunnolla. Joko korjausta ei ole paketoitu geditiin tai Ubuntuun tai sitten korjaus epäonnistui.

        Mikä versio gedit ja ubuntusta? Ja linkin preferences.txt toimii ongelmitta gedit 2.26.1 ja (k)ubuntu 9.04 yhdistelmällä.


      • C-aloittelija
        ja juu.... kirjoitti:

        Mikä versio gedit ja ubuntusta? Ja linkin preferences.txt toimii ongelmitta gedit 2.26.1 ja (k)ubuntu 9.04 yhdistelmällä.

        gedit 2.26.1 ja Ubuntu 9.04. Tuo preferences avautuu OK, mutta esim. osoitteessa http://www.ohjelmointiputka.net/posti.php?tunnus=mpera oleva tiedosto mpera.zip/10.txt ei avaudu geditillä. Uskoisin tiedoston olevan puhdasta ASCII-koodia, kun kerran nano ja emacs avaavat tiedoston ongelmitta.


      • C-aloittelija
        C-aloittelija kirjoitti:

        gedit 2.26.1 ja Ubuntu 9.04. Tuo preferences avautuu OK, mutta esim. osoitteessa http://www.ohjelmointiputka.net/posti.php?tunnus=mpera oleva tiedosto mpera.zip/10.txt ei avaudu geditillä. Uskoisin tiedoston olevan puhdasta ASCII-koodia, kun kerran nano ja emacs avaavat tiedoston ongelmitta.

        Tiedosto siis avautuu kyllä, mutta teksti ei näy kunnolla, vaan kirjaimet ovat lomittain toistensa päällä.


      • On se bugi.
        C-aloittelija kirjoitti:

        gedit 2.26.1 ja Ubuntu 9.04. Tuo preferences avautuu OK, mutta esim. osoitteessa http://www.ohjelmointiputka.net/posti.php?tunnus=mpera oleva tiedosto mpera.zip/10.txt ei avaudu geditillä. Uskoisin tiedoston olevan puhdasta ASCII-koodia, kun kerran nano ja emacs avaavat tiedoston ongelmitta.

        Katopas pirulaista, niinpä tekee. Ja testasin sen verran että päällekkäisyys tulee kun tiedoston koko on 524289 (yksi tuplakirjain). Jos 524288 = 2^19 niin ei, mutta vierityspalkki alhaalta puuttuu. Palkin kynnysarvot näyttäisivät olevan 262143 / 262144 = 2^18.

        (Nopeasti tiedosto palasiksi split-komennolla:
        split -b 524289 10.txt
        gedit xaa
        split -b 524288 10.txt
        gedit xaa
        jne...
        )

        Kääntäjälle pitää antaa -g optio jotta debugaus onnistuu ja sorsat pitää olla myös gtk-kirjastosta (jos sitä aikoo debugata), joten vähän hankalaksi menee (mulla ei kokemusta ohjelman kirjaston debuggauksesta...)

        Muutenhan se menisi vain geditin sorsat. -g optio Makefileen (jollei ole valmiina jotain optiota) ja make ja jokin gui-debugger (Nemiver, Kdbg, ...) komento: nemiver gedit


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Aivosyöpää sairastava Olga Temonen TV:ssä - Viimeinen Perjantai-keskusteluohjelma ulos

      Näyttelijä-yrittäjä Olga Temonen sairastaa neljännen asteen glioomaa eli aivosyöpää, jota ei ole mahdollista leikata. Hä
      Maailman menoa
      91
      2920
    2. Pelotelkaa niin paljon kuin sielu sietää.

      Mutta ei mene perille asti. Miksi Venäjä hyökkäisi Suomeen? No, tottahan se tietenkin on jos Suomi joka ei ole edes soda
      Maailman menoa
      299
      1686
    3. Mikä saa ihmisen tekemään tällaista?

      Onko se huomatuksi tulemisen tarve tosiaan niin iso tarve, että nuoruuttaan ja tietämättömyyttään pilataan loppuelämä?
      Sinkut
      246
      1567
    4. Minkä merkkisellä

      Autolla kaivattusi ajaa? Mies jota kaipaan ajaa Mersulla.
      Ikävä
      87
      1391
    5. IL - VARUSMIEHIÄ lähetetään jatkossa NATO-tehtäviin ulkomaille!

      Suomen puolustuksen uudet linjaukset: Varusmiehiä suunnitellaan Nato-tehtäviin Puolustusministeri Antti Häkkänen esittel
      Maailman menoa
      402
      1384
    6. Nyt kun Pride on ohi 3.0

      Edelliset kaksi ketjua tuli täyteen. Pidetään siis edelleen tämä asia esillä. Raamattu opettaa johdonmukaisesti, että
      Luterilaisuus
      402
      1308
    7. Kiitos nainen

      Kuitenkin. Olet sitten ajanmerkkinä. Tuskin enää sinua näen ja huomasitko, että olit siinä viimeisen kerran samassa paik
      Tunteet
      2
      1089
    8. Esko Eerikäinen tatuoi kasvoihinsa rakkaan nimen - Kärkäs kommentti "Ritvasta" lävähti somessa

      Ohhoh! Esko Eerikäinen on ottanut uuden tatuoinnin. Kyseessä ei ole mikä tahansa kuva minne tahansa, vaan Eerikäisen tat
      Suomalaiset julkkikset
      38
      1047
    9. Hyväksytkö sinä sen että päättäjämme ei rakenna rauhaa Venäjän kanssa?

      Vielä kun sota ehkäpä voitaisiin välttää rauhanponnisteluilla niin millä verukkeella voidaan sanoa että on hyvä asia kun
      Maailman menoa
      329
      874
    10. Miksi Purra-graffiti ei nyt olekkaan naisvihaa?

      "Pohtikaapa reaktiota, jos vastaava graffiti olisi tehty Sanna Marinista", kysyy Tere Sammallahti. Helsingin Suvilahden
      Maailman menoa
      257
      855
    Aihe