Rivinumero tiedostosta luettaessa C++

Katja

Pitäisi saada luettua tiedostosta rivit ja lisättyä tulostuksessa jokaisen rivin eteen rivinumero tyyliin /* 01 */ . Miten tämä onnistuu?

14

981

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • adagad

      FILE *data;
      char line[320];
      int counter=0;

      if((data=fopen("teksti.txt","rt"))==NULL)return;
      while(feof(data)){
      fgets(data,320,data);
      sprintf(stdout,"/* %d04 */ %s
      ",counter,line);
      counter ;
      }
      fclose(data);

      • mattiaz

        adangadin koodi:
        FILE *data;
        char line[320];
        int counter=0;

        if((data=fopen("teksti.txt","rt"))==NULL)return;
        while(feof(data)){
        fgets(line,320,data); //


      • adagad
        mattiaz kirjoitti:

        adangadin koodi:
        FILE *data;
        char line[320];
        int counter=0;

        if((data=fopen("teksti.txt","rt"))==NULL)return;
        while(feof(data)){
        fgets(line,320,data); //

        niin ei tunnut missään


      • Mik
        mattiaz kirjoitti:

        adangadin koodi:
        FILE *data;
        char line[320];
        int counter=0;

        if((data=fopen("teksti.txt","rt"))==NULL)return;
        while(feof(data)){
        fgets(line,320,data); //

        Esimerkki bugaa, sillä:
        -rivejä ei lueta koskaan, sillä whilen feof palauttaa nollan, kun ei olla tiedoston lopussa (testi pitää olla !feof(..))
        -se ei näytä hallitsevan ylipitkiä rivejä siististi (yli 320 merkkiä)
        -sprintf:n 1. argumentti on char *, ei FILE *
        -format string %d04 pitäisi käsittääkseni olla %04d
        -fgets:n paluuarvoa ei tarkisteta ollenkaan


    • Mik

      #include
      #include
      #include

      int main(int argc,char *argv[]) {
      FILE *fp;
      char line[100];
      unsigned int lineno = 1;

      if ( (fp = fopen(argv[1], "r")) == NULL ) {
      printf("open error!
      ");
      return EXIT_FAILURE;
      }

      while( fgets(line, sizeof(line), fp) != NULL) {
      printf("/* %u */ ", lineno);
      do {
      printf("%s", line);
      if (strchr(line, '
      '))
      break;
      if (fgets(line, sizeof(line), fp) == NULL)
      break;
      } while(1);
      lineno ;
      }

      fclose(fp);
      return EXIT_SUCCESS;
      }


      Tämä hallitsee myös ylipitkät rivit. Luettava tekstitiedosto annetaan ohjelmalle ensimmäisenä argumenttina.

      • KLK

        kutsuhan ohjelmaasi ilman argumenttia

        if (argc == 2)
        {
        /***/
        }


      • Mik
        KLK kirjoitti:

        kutsuhan ohjelmaasi ilman argumenttia

        if (argc == 2)
        {
        /***/
        }

        Tuttuun tyyliin jäljelle jäävien (sangen itsestäänselvien) virhetarkistusten tekeminen jätetään harjoitustehtäväksi.

        Tässä foorumissakin näyttää olevan bugi, sillä ja n peräkkäin ei tulostu kuten pitää. Foorumi tekee niiden kohdalla rivinvaihdon. Antamaani esimerkkiin pitää siis laittaa korjaus riveille, missä sijaitsevat 1. printf ja strchr.


      • Mik
        Mik kirjoitti:

        Tuttuun tyyliin jäljelle jäävien (sangen itsestäänselvien) virhetarkistusten tekeminen jätetään harjoitustehtäväksi.

        Tässä foorumissakin näyttää olevan bugi, sillä ja n peräkkäin ei tulostu kuten pitää. Foorumi tekee niiden kohdalla rivinvaihdon. Antamaani esimerkkiin pitää siis laittaa korjaus riveille, missä sijaitsevat 1. printf ja strchr.

        Kylläpäs bugaa oikein urakalla. Viestin esikatselussa homma toimii, mutta lopullisessa viestissä ei. Ehkä kaksi kenoa peräkkäin tekee yhden kenon ? \

        Piti siis kirjoittaa, että "..sillä \ ja n.."


      • pöhkö
        Mik kirjoitti:

        Kylläpäs bugaa oikein urakalla. Viestin esikatselussa homma toimii, mutta lopullisessa viestissä ei. Ehkä kaksi kenoa peräkkäin tekee yhden kenon ? \

        Piti siis kirjoittaa, että "..sillä \ ja n.."

        d
        x
        h


      • Abc
        Mik kirjoitti:

        Tuttuun tyyliin jäljelle jäävien (sangen itsestäänselvien) virhetarkistusten tekeminen jätetään harjoitustehtäväksi.

        Tässä foorumissakin näyttää olevan bugi, sillä ja n peräkkäin ei tulostu kuten pitää. Foorumi tekee niiden kohdalla rivinvaihdon. Antamaani esimerkkiin pitää siis laittaa korjaus riveille, missä sijaitsevat 1. printf ja strchr.

        Mitähän muuta hauskaa foorumin softasta löytyykään....

        :::a:::
        ::::::
        :::c:::
        :::d:::
        :::e:::
        :::f:::
        :::g:::
        :::h:::
        :::i:::
        :::j:::
        :::k:::
        :::l:::
        :::m:::
        :::
        :::
        :::o:::
        :::p:::
        :::q:::
        ::: :::
        :::s:::
        ::: :::
        :::u:::
        :::v:::
        :::w:::
        :::x:::
        :::y:::
        :::z:::

        Ohjelmakoodin esittämistä ajatellen surkea foorumi!


      • Abc
        Abc kirjoitti:

        Mitähän muuta hauskaa foorumin softasta löytyykään....

        :::a:::
        ::::::
        :::c:::
        :::d:::
        :::e:::
        :::f:::
        :::g:::
        :::h:::
        :::i:::
        :::j:::
        :::k:::
        :::l:::
        :::m:::
        :::
        :::
        :::o:::
        :::p:::
        :::q:::
        ::: :::
        :::s:::
        ::: :::
        :::u:::
        :::v:::
        :::w:::
        :::x:::
        :::y:::
        :::z:::

        Ohjelmakoodin esittämistä ajatellen surkea foorumi!

        while( fgets(line, sizeof(line), fp) != NULL) {
        printf("/* %u */ ", lineno);
        do {
        printf("%s", line);
        if (strchr(line, '\n'))
        break;
        if (fgets(line, sizeof(line), fp) == NULL)
        break;
        } while(1);
        lineno ;
        }


      • Abc
        Abc kirjoitti:

        Mitähän muuta hauskaa foorumin softasta löytyykään....

        :::a:::
        ::::::
        :::c:::
        :::d:::
        :::e:::
        :::f:::
        :::g:::
        :::h:::
        :::i:::
        :::j:::
        :::k:::
        :::l:::
        :::m:::
        :::
        :::
        :::o:::
        :::p:::
        :::q:::
        ::: :::
        :::s:::
        ::: :::
        :::u:::
        :::v:::
        :::w:::
        :::x:::
        :::y:::
        :::z:::

        Ohjelmakoodin esittämistä ajatellen surkea foorumi!

        while( fgets(line, sizeof(line), fp) != NULL) {
           printf("/* %u */ ", lineno);
           do {
              printf("%s", line);
              if (strchr(line, '
        '))
                 break;
              if (fgets(line, sizeof(line), fp) == NULL)
                 break;
           } while(1);
           lineno ;
        }


      • Abc
        Abc kirjoitti:

        while( fgets(line, sizeof(line), fp) != NULL) {
           printf("/* %u */ ", lineno);
           do {
              printf("%s", line);
              if (strchr(line, '
        '))
                 break;
              if (fgets(line, sizeof(line), fp) == NULL)
                 break;
           } while(1);
           lineno ;
        }

        Sisentäminen EI onnistu sarkainmerkillä (\t), mutta merkkikoodilla 255 riville saa "välilyönnin", jota järjestelmä ei siivoa pois.

        ...luettavan koodin liittäminen foorumin sivuille onnistuu sittenkin muutamalla pienillä korvausoperaatiolla.


      • Mik
        Abc kirjoitti:

        Sisentäminen EI onnistu sarkainmerkillä (\t), mutta merkkikoodilla 255 riville saa "välilyönnin", jota järjestelmä ei siivoa pois.

        ...luettavan koodin liittäminen foorumin sivuille onnistuu sittenkin muutamalla pienillä korvausoperaatiolla.

        Kaiken lisäksi foorumi ei näytä osaavan muuttaa oikein joitakin erikoismerkkejä. Joskus ainakin otsikoissa &-merkki jää kääntämättä html:stä, ja sen tilalla lukee & amp;..

        Näköjään html suodatetaan myös, eikä tekstiä yritetä tulkita ollenkaan ns. as-is. & ja amp; kirjoitettuna peräkkäin suodatetaan, jolloin tekstin esikatselussa näkyy vain pelkkä &.


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

    Luetuimmat keskustelut

    1. Vasemmistohallitus palauttaa hintasääntelyn, esim. bensalitra vain 1e.

      Tuleva vasemmistolaisista koostuva hallitus ottaa käyttöön vanhat hyvät keinot pitää hinnat kurissa. Tähän tarkoitukse
      Maailman menoa
      68
      4490
    2. Vasemmistolainen valehteli jälleen - Purra tai persut eivät luvanneet "euron bensaa"

      Väite "euron bensasta" on ensisijaisesti poliittisten vastustajien käyttämä puhdas vale. Persut kyllä kampanjoivat näky
      Maailman menoa
      105
      3749
    3. Arman Alizadin viesti puna-aktivisteille: "Pitäkää lärvinne nytkin kiinni"

      Arman Alizad kritisoi vasemmiston kaksinaismoralismia. Iranissa syntynyt suosikkijuontaja Arman Alizad pakeni perheensä
      Maailman menoa
      111
      3377
    4. Minja Koskela nostanut vasemmistoliiton kannatuksen ennätykseen

      Koskela valittiin puolueen johtoon lokakuussa 2024, ja silloin Ylen kysely antoi puolueelle 9,3 prosentin kannatuksen.
      Maailman menoa
      28
      1931
    5. Antti johtaa Petteriä jo 7,1 prosenttiyksiköllä

      Tällä menolla sdp menee kokoomuksesta kierroksella ohi jo tällä vaalikaudella. https://yle.fi/a/74-20213575
      Maailman menoa
      69
      1911
    6. Mitä on tullut

      Entisen abcn rakennuksen tilalle se oli tyhjillään monta vuotta siellä oli jo nyt valot onko huoltoasema? 5:30.
      Haapavesi
      87
      1185
    7. Harmi nainen kun

      olet niin elähtäneen näköinen. Miestä et koskaan löydä itelles. j
      Ikävä
      90
      939
    8. Minne pyydän sut?

      Jotta saan nähdä 🤨
      Ikävä
      55
      895
    9. Palosta selvinnyt 18 vuotias munira tarvitsi tulkin kun puhui Iltalehdelle

      Suomessa asuva 18 vuotias tarvii tulkin !!! Tää Suomea puhumaton on palossa kuolleen naisen veli ja asui perheen kanssa.
      Vantaa
      125
      892
    10. Mikä homma?

      https://share.google/NvruSS4P4EzjTWPov Poliisilla oli keskiviikkona 4. maaliskuuta yksityisasunnossa Saarijärvellä tehtä
      Saarijärvi
      25
      817
    Aihe