Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703

    [c++]stampa a video solo determinate info

    mm, allora ho un file di testo disposto in questo modo:

    202674
    992547
    892157
    CODE:2345
    DTE:16-2-09
    #
    66712
    992547
    CODE:99400
    DTE:13-2-09
    #

    io prima di tutto lo leggo interamente e lo suddivido in tante righe:
    codice:
    void stampa_elenco(string mg)
                {
                    j=0;
                    fstream leggifile("lista.txt",ios::in);
                    if(!leggifile) cout << "impossibile aprire la lista";
                    while(!leggifile.eof())
                    {
                        leggifile.getline(riga_letta[j++],MAX_LINE_LEN);
                    }
                    leggifile.close();
                    for(int y = 0 ; y < j-1 ; y++)
                    {
                        if(strncmp(strings[y],mg,5))
                        {
                            cout << "trovata";
                        }
                    }
    
    
    
                }
    Ora dentro il for devo confrontare se la linea è uguale ad una determinata stringa(il parametro della funzione) ,l'ho fatto solo che dovrei dirgli che se l'ha trovato ed ha incontrato un asterisco non lo stampa più..altrimenti mi stampa lo stesso dato 5-6 volte tipo..ora in caso affermativo stampare tutto quello che c'è dentro al blocco; ad esempio:

    stringa --> 992547
    Essendo presente in entrambi i blocchi(i blocchi li intendo come delimitati dal cancelletto), stamperò a video:

    992547
    CODE:2345
    DTE:16-2-09
    CODE:99400
    DTE:13-2-09

    come posso fare?! sono abbastanza in crisi

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Io non ho capito cosa vuoi fare ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    non saprei propio come esprimere in codice:
    se trovi la matricola, stampa tutte le righe che iniziano per CODE: e DTE: e fermati quando incontri il primo cancelletto.

    sono stato più chiaro?! altrimenti chiedi pure ^^ grazie

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma cosa vuoi dire con la faccenda dell' asterisco ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    nel senso che ogni "blocco" oltre ad essere delimitato da un asterisco contiene sempre:
    CODE:xxxx
    DTE: xxxx

    con "code" e "dte" fissi; per questo ho inserito il delimitatore('*'), una volta trovata la stringa a me serve stampare a video i due "code" e "dte" successivi..
    mi sono spiegato meglio?

    ad esempio:
    202674
    992547
    892157
    CODE:2345
    DTE:16-2-09
    #
    66712
    992547
    CODE:99400
    DTE:13-2-09
    #

    se trovassi 892157 io voglio stampare SOLO
    CODE:2345
    DTE:16-2-09
    e basta..

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma non ci vedo o nei blocchi che hai indicato l'asterisco * non c'e'???
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    scusami..il cancelletto che scemo ho sbagliato...

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da cleaner
    scusami..il cancelletto che scemo ho sbagliato...
    Ne avrei avuto di tempo a cercare l'asterisco ...

    Comunque, qualcosa del genere ...

    codice:
    #include <iostream>
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    void stampa_elenco(string mg)
    {
      int st=0;
      string line;
    
      fstream leggifile("lista.txt", ios::in);
      while(!leggifile.eof())
      {
        leggifile >> line;
    
        switch(st)
        {
          case 0:
            if(line==mg) st=1;
            break;
          case 1:
            if(line.substr(0, 5)=="CODE:")
               cout << line << endl;
            if(line.substr(0, 4)=="DTE:")
            {
               cout << line << endl;
               st=2;
            }
            break;
          case 2:
            break;
        }
      }
      
      leggifile.close();
    }
    
    int main()
    {
      stampa_elenco("892157");
    
      return 0;
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    perfetta grande!

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    azz mi sono accorto di un piccolo problema, all'inizio mi era propio sfuggito..
    se la stringa mg è ripetuta più volte nel file, quella funzione stampa i corrispettivi 'CODE:' e 'DTE:' una sola volta..ad esempio:


    202674
    992547
    892157
    CODE:2345
    DTE:16-2-09
    #
    66712
    992547
    202674
    CODE:99400
    DTE:13-2-09
    #

    '202674' compare due volte..il problema è che se lancio la funzione, l'output è :

    202674
    CODE:2345
    DTE:16-2-09

    INVECE CHE:


    202674
    CODE:2345
    DTE:16-2-09
    CODE:99400
    DTE:13-2-09

    mm..c'è qualcosa che non quadra, io avevo capito che quel codice leggeva fino alla fine del file..per questo lo incontra per forza due volte '202674'... :master:

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.