Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    4

    [c++] Leggere un file a spazi delimitati e trasformarlo in CSV

    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:

    codice:
    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:

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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    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?

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    4
    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

    codice:
    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

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Quindi ti va bene in phyton?

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    4
    per quello che serve a me si,
    ma sarei curioso anche di vedere un equivalente in c++ che io non sono riuscito a fare

  6. #6
    In python, un po' più compatto:

    codice:
    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')
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

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.