Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - C++ - Problema - Stringhe, File, Confronti e Cout
Forum - C/C++ - C++ - Problema - Stringhe, File, Confronti e Cout

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
rudibest (Normal User)
Newbie


Messaggi: 7
Iscritto: 09/05/2008

Segnala al moderatore
Postato alle 22:09
Venerdì, 09/05/2008
Buonasera ragazzi del forum.
Sto provando a fare un programma in C++ per migliorare un lavoro che sto facendo.
Già ho fatto parte del codice utile ma non riesco ad implementare la seguente funzione.
Questa funzione deve:
- Prendere un File.txt in Ingresso.
- Leggere ogni riga del file e converte le parole "Aperto" e "Chiuso" rispettivamente in "1" e "0".
- Inserire questi valori in un array ordinato per nome.
- Salvare l'array in un file di uscita In.txt

Esempio:
Questo è un tipico esempio del contenuto del mio File.txt:
----------
Prova di testo
Rudi
E01_1  Aperto
E02_1  Aperto
E03_1  Chiuso
E04_1  Aperto
E05_1  Errato
E06_1  Chiuso
Fine del testo
CS 01
----------

Array[100]=[1,1,0,1,0] parole Aperto e Chiuso convertite in 1 e 0.
La riga con la scritta diversa da Aperto e Chiuso esempio "Errato" deve essere saltata.

File di uscita In.txt:
----------
1
1
0
1
0
----------

Spero che qualcuno di voi possa darmi una mano.
Ringrazio anticipatamente quanti possono aiutarmi.

Ultima modifica effettuata da rudibest il 09/05/2008 alle 22:13
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 15:12
Sabato, 10/05/2008
E dove ti blocchi nello sviluppo di questo programma? Hai già provato a fare una bozza?


Il mio blog: https://piero.dev
PM Quote
Avatar
rudibest (Normal User)
Newbie


Messaggi: 7
Iscritto: 09/05/2008

Segnala al moderatore
Postato alle 7:57
Domenica, 11/05/2008
Questo è quello che sono riuscito a sviluppare fin ora.

Codice sorgente - presumibilmente C#

  1. int vtot=0, va=0, vb=0, ff=0; // variabile di appoggio per scorrimento vettore.
  2.  int gndtot[400], gnda[40], gndb[40]; // vettori dati per GNDA, GNDB e GNDTOT[a+b]
  3.  
  4.  char aperto[7]="Aperto", chiuso[7]="Chiuso", app[7]; // Variabili per ricerca nel file.
  5.  char ponticello[10], valore[10]; // variabili per trasposizione file-stringa.
  6.  
  7. ifstream fin, fout; // dichiarazioni variabile dei file di in e out.
  8.  FILE *fp; // Puntatore al file.
  9.  
  10.  fin.open("P05MI.uio", ios::in); // Apertura file.
  11.  if(!fin) // controllo esistenza file.
  12.  { cout << "Errore! Impossibile aprire il File di Input" <<endl;
  13.       system("PAUSE"); //Premi un tasto per continuare.
  14.       exit(1);
  15.  }
  16.  else { fp = fopen("P05MI.uio","r"); cout<<"Apertura corretta del file...\n"; } // dopo la corretta apertura assegna il puntatore.
  17.  
  18.  while(fin>>ponticello>>valore)
  19.   { if(strcmp(valore,aperto)==0)
  20.      { gndtot[vtot]=1;
  21.        vtot++;    
  22.      }
  23.     if(strcmp(valore,chiuso)==0)
  24.      { gndtot[vtot]=0;
  25.        vtot++;    
  26.      }
  27.    cout<<"Pont="<<ponticello<<" - Val="<<valore<<endl;
  28.         }
  29.  
  30. for(va=0;va<vtot;va++) //Vusualizzazione vettore di prova finale.
  31.  cout<<gndtot[va]<<" - ";
  32.  
  33. fclose(fp);



Il problema ce lo quando deve riconoscere il nome del ponticello e mettere il corrispondente valore nel vettore presceto.
Per farmi capire. Nell'ultimo While dopo che ha riconosciuto i valori Aperto e chiusto tramite la funzione strcmp() deve inserire tale valore convertito in binario dentro l'apposito vettore. I vettori in totale sono 3. Nel primo andiamo ad inserire il valore 0/1 di alcuni ponticelli, nel secondo il valore 0/1 di altri ponticelli ed il terzo conterrà l'unione del primo più il secondo ponticello. Poi si deve creare un file txt di uscita con il contenuto di questo terzo vettore.

In allegato ho messo un'immagine dell'output a video che ho ora.
Nel programma si devono differenziare a video i 3 vettori.

Grazie 1000 a chi può darmi una mano.


rudibest ha allegato un file: prova.JPG (85351 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da rudibest il 11/05/2008 alle 8:05
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 9:43
Domenica, 11/05/2008
Mi sembra che tu non abbia dato tutte le informazioni per fare in modo che ti si possa aiutare ...

Una volta che riempi il primo vettore cosi' come fai nella while, come dovrebbe essere riempito il secondo ? E il terzo ?

Se il secondo deve contenere altri valori simili al primo, perche' non li leggi come hai fatto per il primo ...?

E poi, perche' prima utilizzi uno stream e poi una fopen per lo stesso file ? Dovresti decidere di usare sempre uno dei metodi (C++ o C ...)

Ultima modifica effettuata da gantonio il 11/05/2008 alle 9:45
PM Quote
Avatar
rudibest (Normal User)
Newbie


Messaggi: 7
Iscritto: 09/05/2008

Segnala al moderatore
Postato alle 19:10
Domenica, 11/05/2008
Testo quotato

Postato originariamente da gantonio:

Mi sembra che tu non abbia dato tutte le informazioni per fare in modo che ti si possa aiutare ...

Una volta che riempi il primo vettore cosi' come fai nella while, come dovrebbe essere riempito il secondo ? E il terzo ?

Se il secondo deve contenere altri valori simili al primo, perche' non li leggi come hai fatto per il primo ...?

E poi, perche' prima utilizzi uno stream e poi una fopen per lo stesso file ? Dovresti decidere di usare sempre uno dei metodi (C++ o C ...)



Allora, il primo è il secondo vettore devono essere riempiti attraverso una condizione.
Praticamente il valore di alcuni ponticelli devono essere inseriti nel primo vettore e il valore degli altri ponticelli nel secondo vettore.
Per esempio: i valori del primo, secondo e quarto ponticello devono essere inseriti nel primo vettore mentre i valori del terzo e quinto nel secondo vettore.
Poi, il terzo vettore deve essere composto dal primo vettore + il secondo vettore. Questo credo si faccia esternamente al ciclo while.
Come linguaggio di programmazione vorrei utilizzare solo il C++, come hai visto non sono afferrato al massimo su queste tematiche di programmazione un pò più complesse.
Sono stato più chiaro possibile.

Ringrazio nuovamente per l'aiuto.

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 19:45
Domenica, 11/05/2008
Per riempire il terzo array, se hai il primo e il secondo e il numero di elementi presenti nel primo e nel secondo, basta un for ...

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 20:21
Domenica, 11/05/2008
Ma fare così senza usare un terzo array?

Codice sorgente - presumibilmente C/C++

  1. /* ... */
  2.  
  3. ofstream os("output.txt");
  4.  
  5. while(fin>>ponticello>>valore){
  6.   if(strcmp(valore,aperto)==0) os << 1 << endl;
  7.   else if(strcmp(valore,chiuso)==0) os << 0 << endl;
  8. }
  9.  
  10. os.close();
  11.  
  12. /* ... */




Il mio blog: https://piero.dev
PM Quote
Avatar
rudibest (Normal User)
Newbie


Messaggi: 7
Iscritto: 09/05/2008

Segnala al moderatore
Postato alle 10:36
Lunedì, 12/05/2008
RAgazzi questo è per l'output del terzo. fin qui ok.

MA il problema ce lo quando devo riempire il primo ed il secondo.

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 11:33
Lunedì, 12/05/2008
Il while che hai mostrato riempie il primo ... no?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo