PDA

Visualizza la versione completa : [c++] Leggere un file a spazi delimitati e trasformarlo in CSV


1981
25-03-2007, 11:05
ho un file con la seguente struttura

7 record di 120 caratteri

ogni record ha dei valori delimitati in posizioni precise

posizione 1- filler
posizione 2-10 name
posizione 11-15 type
posizione 20-30 number
...

ex fileorgine.txt:


casa gino 123546 pipppo gigi
frutta verdura 52621

casa2 gino2 123546_ pipppo2 gigi2
frutta2 verdura2 526212

io voglio creare un altro file che abbia gli stessi valori separati da virgola
escludendo i filler

name;type;number

ex filedest.txt:


casa;gino;123546;pipppo;gigi;frutta;verdura;52621
casa2;gino2;1235462;pipppo2;gigi2;frutta2;verdura2 ;526212

oregon
25-03-2007, 11:50
E quindi?

Hai scritto del codice che non funziona?

Oppure non hai scritto nulla, nel qual caso ti consiglio di iniziare ...

E poi, lavori con Windows, Linux ... quale compilatore?

1981
25-03-2007, 15:56
ciao Oregon,
con il c++ ho avuto dei problemi nel suddividere le stringe ctring in base al numero fisso di caratteri.

allora ho risolto con il phyton, che non conoscevo nemmeno ma in una sola mattina sono riuscito ad apprendere facilmente :O


input = open('testo.txt', 'r')
output = open('testo_elab.csv', 'w')
scrivi = "cod1;cod2;cod3;cod4;cod5;cod6....cod50" #scrivo le intestazioni di colonna
for riga in input.readlines():
leggi = riga
if leggi [1:3] == '14':
scrivi = leggi[22:28]+";"+leggi[28:33]+";"+leggi[46]+leggi[33:46]+";"
if leggi [1:3] == '20':
scrivi = leggi[10:106]+";"
if leggi [1:3] == '30':
scrivi = leggi[10:70]+";"+leggi[70:86]+";"
if leggi [1:3] == '40':
scrivi = leggi[10:40]+";"+leggi[40:45]+";"+leggi[45:68]+";"+leggi[68:70]+";"
if leggi [1:3] == '50':
scrivi = leggi[10:90]+";"+leggi[100:116]+";"
if leggi [1:3] == '51':
scrivi = leggi[10:20]+";"+leggi[20:40]+";"+leggi[40:55]+";"+leggi[55:65]+";"
if leggi [1:3] == '70':
scrivi = leggi[88:100]+";"+leggi[101]+";"+leggi[102]+";"+leggi[103:120]+"\n"
output.write(scrivi)
scrivi = ""
input.close()
output.close()

ho risolto il mio problema, se per˛ qualche volenteroso, mi mostra anche il codice dell'equivalente c++ non sarebbe male ;)

oregon
25-03-2007, 15:58
Quindi ti va bene in phyton?

1981
25-03-2007, 16:24
per quello che serve a me si,
ma sarei curioso anche di vedere un equivalente in c++ che io non sono riuscito a fare :dh˛:

billiejoex
25-03-2007, 23:34
In python, un po' pi¨ compatto:


f1 = open('1.txt', 'r')
f2 = open('2.txt', 'w')
for line in f1.readlines():
if line != '\n':
line = line.split()
for word in line:
f2.write(word + ';')
f2.write('\n')

Loading