PDA

Visualizza la versione completa : [C++] Avere più dati per ogni riga


freetom
13-05-2012, 16:23
Ho questo codice utilissimo per estrapolare le estrazioni da ogni ruota dal file storico.txt però questo me le mette tutte in verticale... mentre adesso mi necessiterebbe modificarlo al fine di avere 11 combinazioni per ogni singola ruota su ogni riga (rappresentante ogni estrazione).

Cerco di spiegarmi meglio con questo esempio scritto:

Al momento il codice





#include <iostream>
#include <fstream>
#include <string>

using namespace std;


int main (int argc, char *argv[])
{
ifstream fin;
fin.open("storico.txt");

ofstream fout;
fout.open("ESTRAZIONI-TUTTEeNAZIONALE.txt");

string s;
bool isOk = false;
int cnt = 0;

while(!fin.eof())
{

fin >> s;

if(isOk)
{

if(cnt<4)
{
cout << s << "#";
fout << s << "#";
cnt++;
}
else if(cnt<5)
{
cout << s;
fout << s;
cnt++;
}
else
{
cout << "|";
fout << "|";
cnt=0;
isOk=false;
}
}


if(s=="BA" || s=="CA" || s=="FI" || s=="GE" || s=="MI" || s=="NA" || s=="PA" || s=="RM" || s=="TO" || s=="VE" || s=="RN") isOk=true;



}

cout << "Press ENTER to continue..." << endl;
cin.get();

return 0;
}









mi genera un file txt di questo tipo:

58#22#47#49#69|
27#57#81#43#61|
40#38#57#67#7|
85#44#48#88#55|
73#80#39#38#57|
73#24#4#39#22|
19#43#10#31#27|
9#43#61#14#75|
18#77#33#62#19|
31#47#12#7#80|
35#24#52#90#41|
4#10#36#63#35|
10#77#43#37#35|
4#86#61#84#58|
82#7#15#88#34|
85#21#45#65#56|
68#65#41#28#67|
37#82#69#9#67|
37#23#12#19#27|
15#76#82#11#55|
29#8#44#69#28|
36#74#7#70#76|
36#41#43#35#40|
76#85#50#42#22|
76#55#48#85#71|
24#40#12#77#30|
47#85#18#38#50|
73#34#8#39#17|
52#25#63#84#60|
56#87#82#90#53|
27#48#40#33#67|
58#84#13#51#32|
70#2#20#85#75|

In grassetto o evidenziato la combinazione dell'ultima ruota (VE) per ogni estrazione
E in questo esempio sono state considerate solo 3 estrazioni.

Mentre adesso io vorrei generato un file di questo altro tipo:


58#22#47#49#69|27#57#81#43#61|40#38#57#67#7|85#44# 48#88#55|73#80#39#38#57|73#24#4#39#22|19#43#10#31# 27|9#43#61#14#75|18#77#33#62#19|31#47#12#7#80|35#2 4#52#90#41|

4#10#36#63#35|10#77#43#37#35|4#86#61#84#58|82#7#15 #88#34|85#21#45#65#56|68#65#41#28#67|37#82#69#9#67 |37#23#12#19#27|15#76#82#11#55|29#8#44#69#28|36#74 #7#70#76|

36#41#43#35#40|76#85#50#42#22|76#55#48#85#71|24#40 #12#77#30|47#85#18#38#50|73#34#8#39#17|52#25#63#84 #60|56#87#82#90#53|27#48#40#33#67|58#84#13#51#32|7 0#2#20#85#75|

Ovverosia solo dopo la combinazione dell'ultima ruota (VE) la riga dovrebbe andare a capo...

Ho provato e riprovato a mettere cicli con for al fine di mandare a capo la riga di scrittura dopo 11 sottocicli (relativi alle varie ruote ad es...) ma nulla...

Quindi chiedo agli/alle esperti/e magari a colui che mi ha ispirato per il codice soprastante
(praticamente io l'ho modificato in piccolissima parte) che se ricordo bene è il mitico oregon
di apportare questa per me vitale... modifichina. :zizi:

Grazie mille a tutti/e in ascolto... e buona domenica o quel che ne resta! :ciauz:

Scara95
13-05-2012, 21:22
Ti prego per la mia sanità mentale di chiudere i file prima dell'uscita :stordita:

In ogni caso potreti postare un segmento del file di input?

freetom
14-05-2012, 07:13
Ciao scara95, non ho capito cosa ti necessita...
Ovvero con "potresti postare un segmento del file di input..."
non capisco a cosa tu ti riferisca a meno che tu non
intenda uno screen shoot del programma in esecuzione...
ma non credo... Ad ogni modo il programma e' tutto qui.

Grazie
:ciauz:

Scara95
14-05-2012, 07:21
Intendo un pezzo del file da cui leggi...

freetom
14-05-2012, 09:23
Originariamente inviato da Scara95
Intendo un pezzo del file da cui leggi...

Se ho capito bene...

Ecco qua un pezzo del file "letto" in input...

Il file storico.txt contiene ad esempio:

2012/04/05 BA 13 18 34 19 75
2012/04/05 CA 22 39 7 42 90
2012/04/05 FI 74 2 70 18 40
2012/04/05 GE 68 39 8 38 10
2012/04/05 MI 35 14 74 59 20
2012/04/05 NA 44 54 13 18 90
2012/04/05 PA 70 29 80 90 38
2012/04/05 RM 77 4 79 23 38
2012/04/05 RN 70 10 32 22 81
2012/04/05 TO 8 28 90 23 27
2012/04/05 VE 43 90 50 55 46
2012/04/07 BA 75 54 22 10 11
2012/04/07 CA 36 49 3 58 45
2012/04/07 FI 42 58 29 11 60
2012/04/07 GE 53 52 58 10 2
2012/04/07 MI 81 89 37 69 73
2012/04/07 NA 80 59 46 82 33
2012/04/07 PA 48 58 78 30 81
2012/04/07 RM 24 86 50 35 83
2012/04/07 RN 51 76 45 4 72
2012/04/07 TO 30 8 85 26 24
2012/04/07 VE 41 78 28 3 70

Grazie

:ciauz:

Caiodark
14-05-2012, 09:34
Originariamente inviato da Scara95
Ti prego per la mia sanità mentale di chiudere i file prima dell'uscita :stordita:

In ogni caso potreti postare un segmento del file di input?

Si arrangia il distruttore a chiudere i file, potere del RAII.

Caiodark
14-05-2012, 09:58
Ok, ho eseguito il tuo codice con il tuo file e, come sospettavo, l'output che produci non va mai a capo. Tu produci un file di testo di una riga sola.

Pertanto per fare quello che tu vuoi effettua questo cambiamento dove inserisci il carattere pipe:



cout << "|\n";
fout << "|\n";

freetom
14-05-2012, 10:13
No no... Il COD che ho postato in effetti non comprende
Il ritorno a capo per errore :( ma non si tratta di quello...
Nella versione corretta che ho riporta giustamente una combinazione
Sotto l'altra includendo appunto il Carattere speciale \n
Io pero' avrei bisogno come postato nel primo
Msg di andare a capo solo dopo l'ultima ruota
Ovvero solo dopo Venezia... E cosi' per
Tutti i giorni di estrazione... Spero di essere
Stato piu' chiaro adesso. Grazie comunque :ciauz:

Caiodark
14-05-2012, 10:21
Non ti scrivo il codice ma ti aiuto a ragionare.
Cominci a scrivere il file ogni qual volta isOk è vera.
Nell'istruzione in cui valorizzi isOk controlli anche se s=='VE' che è anche la condizione in cui oltre al pipe dovrai inserire il carattere \n.
Ti suggerisco di controllare, magari con una ulteriore variabile bool, quando ti si presenta s=='VE' e di verificarla nel ciclo di scrittura per fare l'output del carattere \n.

Who am I
14-05-2012, 12:47
Puoi costare il codice "vero" che stai usando?

Loading