Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Conversione CSV - ASCII

441 views
Skip to first unread message

Griso

unread,
Mar 9, 2012, 8:25:49 AM3/9/12
to
Buongiorno a tutti.
Avendo un file CSV contenente 4 campi delimitati da punto e virgola č possibile convertirlo in un file ASCII con un tracciato record ben definito?
Cioč: leggo il primo dato e lo scrivo dal carattere 1 a 5 della nuova stringa, poi leggo il successivo della stessa riga e lo scrivo da 10 a 30... e cosě via...
C'č un modo per fare ciň ?
grazie

Andrea Malfatti

unread,
Mar 9, 2012, 11:10:58 AM3/9/12
to
Apri con calc, che ti chiedera' conferma del formato attuale
(controlla e se serve fai le opportune modifiche), una volta
visualizzato su calc fai "Salva con nome" nella dialog per il
salvataggio metti il segno di spunta sulla casella piu' bassa
(dovrebbe essere "Modifica impostazioni filtro"), cambia il nome del
file e premi "Salva", si apre una nuova finestra nella quale, sempre
ultima casella, spunti "Ampiezza colonna fissa" e dai l'ultimo OK.
--
Ciao
Andrea Malfatti

Griso

unread,
Mar 9, 2012, 12:01:34 PM3/9/12
to
> Apri con calc, che ti chiedera' conferma del formato attuale
> (controlla e se serve fai le opportune modifiche), una volta
> visualizzato su calc fai "Salva con nome" nella dialog per il
> salvataggio metti il segno di spunta sulla casella piu' bassa
> (dovrebbe essere "Modifica impostazioni filtro"), cambia il nome del
> file e premi "Salva", si apre una nuova finestra nella quale, sempre
> ultima casella, spunti "Ampiezza colonna fissa" e dai l'ultimo OK.

Grazie per la risposta, ma la questione è un po' più complessa....
su ogni record ho 4 "pezzi" suddivisi dal punto e virgola: precodice, codice, descrizione, prezzo.
Io dovrei poter acchiappare il primo pezzo (precodice) e metterlo in un file di output in un nuovo record, dal carattere 1 al carattere 3. Poi leggo il secondo pezzo (codice) e lo metto in output dal carattere 4 al carattere 15 e così via per il pezzo 3 ed il pezzo 4.
A questo punto leggo il secondo record, cioè la seconda serie di 4 pezzi e lo riscrivo...
In poche parole devo trasformare un listino fornitore in un listino compatibile con il mio tracciato record di aggiornamento...

Andrea Malfatti

unread,
Mar 12, 2012, 7:17:35 AM3/12/12
to
Forse non e' tanto complesso, quando apri il file csv avrai gia' i
record separati in colonne, se sono gia' lunghi 3 e 12 caratteri con
la funzione concatena() le unisci, ma siccome sarebbe troppo bello,
non credo che la lunghezza sia gia' giusta, devi portare i contenuti
alle giuste grandezze,

=CONCATENA(A1;RIPETI(" ";3-LUNGHEZZA(A1))) <a>

=CONCATENA(RIPETI(" ";3-LUNGHEZZA(A1));A1) <b>

con questa formula aggiungi dietro <a> o davanti <b> al contenuto
della cella A1 gli spazi necessari ad arrivare a 3 caratteri
(ovviamente se ti servono degli zeri o qualsiasi altro carattere,
sostituirai allo spazio tra virgolette il carattere che vuoi
virgolette comprese).
La stessa formula, con le opportune modifiche, puoi usarla per tutti
gli altri campi.

Alla fine concateni tutti i campi portati a lunghezza giusta e ottieni
una colonna che potrai importare nel tuo database.


--
Ciao
Andrea Malfatti

Griso

unread,
Mar 12, 2012, 9:44:06 AM3/12/12
to

> Forse non e' tanto complesso, quando apri il file csv avrai gia' i
> record separati in colonne, se sono gia' lunghi 3 e 12 caratteri con
> la funzione concatena() le unisci, ma siccome sarebbe troppo bello,
> non credo che la lunghezza sia gia' giusta, devi portare i contenuti
> alle giuste grandezze,
>
> =CONCATENA(A1;RIPETI(" ";3-LUNGHEZZA(A1)))<a>
>
> =CONCATENA(RIPETI(" ";3-LUNGHEZZA(A1));A1)<b>
>
> con questa formula aggiungi dietro<a> o davanti<b> al contenuto
> della cella A1 gli spazi necessari ad arrivare a 3 caratteri
> (ovviamente se ti servono degli zeri o qualsiasi altro carattere,
> sostituirai allo spazio tra virgolette il carattere che vuoi
> virgolette comprese).
> La stessa formula, con le opportune modifiche, puoi usarla per tutti
> gli altri campi.
>
> Alla fine concateni tutti i campi portati a lunghezza giusta e ottieni
> una colonna che potrai importare nel tuo database.

Intanto ti ringrazio perchč mi hai dato una soluzione al mio problema.
Sto facendo delle prove e mi sembra un'ottima soluzione.
Approfitto della tua gentilezza per chiederti un'altra informazione:
il campo descrizione č piů lungo di quello che mi serve... come posso troncare la stringa alfanumerica ad un valore prestabilito?
Ho provato con TRONCA ma vedo che č valido solo per i numeri... o sbaglio?









Andrea Malfatti

unread,
Mar 12, 2012, 11:18:51 AM3/12/12
to
Il Mon, 12 Mar 2012 14:44:06 +0100, Griso ha scritto:

> Intanto ti ringrazio perchč mi hai dato una soluzione al mio problema.
> Sto facendo delle prove e mi sembra un'ottima soluzione.
> Approfitto della tua gentilezza per chiederti un'altra informazione:
> il campo descrizione č piů lungo di quello che mi serve... come posso troncare la stringa alfanumerica ad un valore prestabilito?
> Ho provato con TRONCA ma vedo che č valido solo per i numeri... o sbaglio?

Suppongo ti serva la parte sinistra, per cui

=SINISTRA(A1;3)

prende i primi tre caratteri a sinistra.

Per quanto riguarda il TRONCA serve per troncare (quindi non
arrotondare) i decimali di un numero 1,19 troncato ad un decimale
diventa 1,1 mentre arrotondato 1,2
--
Ciao
Andrea Malfatti

Griso

unread,
Mar 13, 2012, 5:23:50 AM3/13/12
to
> Suppongo ti serva la parte sinistra, per cui
>
> =SINISTRA(A1;3)
>
> prende i primi tre caratteri a sinistra.
>
> Per quanto riguarda il TRONCA serve per troncare (quindi non
> arrotondare) i decimali di un numero 1,19 troncato ad un decimale
> diventa 1,1 mentre arrotondato 1,2

Ok, sono riuscito ad ottenere un listino con il formato che mi serviva. Ti ringrazio infinitamente per il preziosissimo aiuto.
Solo un'ultima cosa: è possibile eliminare un carattere e shiftare di un posto tutti gli altri?
Mi spiego meglio: i miei prezzi possono variare da 1 a 9999 euro con 2 decimali.
Quindi, partendo da destra dovrei eliminare il 3° carattere (che è la virgola) e fare slittare tutti i numeri a sinistra della virgola di un posto verso destra.
Hai una funzioncina anche per questo ?
grazie ancora

Griso

unread,
Mar 13, 2012, 5:43:02 AM3/13/12
to
ho risolto, ho fatto il TRONCA da sx e poi da dx e poi ho riconcatenato.
grazie ancora
ciao

Griso

unread,
Mar 13, 2012, 9:32:06 AM3/13/12
to

> ho risolto, ho fatto il TRONCA da sx e poi da dx e poi ho riconcatenato.
> grazie ancora
> ciao
>

no, non va bene quest'ultima cosa.
Quando l'ultimo decimale è uno zero viene tralasciato e succede un disastro.
C'è una funzione che dato un numero con decimali ne restituisca i numeri puri che lo compongono senza virgola ?
Esempio: 15,60 diventa 1560
grazie


VITRIOL

unread,
Mar 13, 2012, 9:59:30 AM3/13/12
to
Il 13/03/2012 14:32, Griso ha scritto:

> C'è una funzione che dato un numero con decimali ne restituisca i numeri puri che lo compongono senza virgola ?
> Esempio: 15,60 diventa 1560

Io non ho capito se vuoi lavorare su numeri o su stringhe. Questo 1560
deve essere un numero o un testo? Oltre a questo, se ad esempio hai
15,06 il risultato deve essere 1506 o 156?

--
Saluti
VITRIOL

Andrea Malfatti

unread,
Mar 13, 2012, 10:08:38 AM3/13/12
to
Il Tue, 13 Mar 2012 10:23:50 +0100, Griso ha scritto:

> Ok, sono riuscito ad ottenere un listino con il formato che mi serviva. Ti ringrazio infinitamente per il preziosissimo aiuto.
> Solo un'ultima cosa: è possibile eliminare un carattere e shiftare di un posto tutti gli altri?
> Mi spiego meglio: i miei prezzi possono variare da 1 a 9999 euro con 2 decimali.
> Quindi, partendo da destra dovrei eliminare il 3° carattere (che è la virgola) e fare slittare tutti i numeri a sinistra della virgola di un posto verso destra.
> Hai una funzioncina anche per questo ?
> grazie ancora

Ok, se ho capito bene se l'importo e' di 105,45 a te serve che sia
rappresentato come 10545 giusto?

Probabilmente la cosa piu' semplice e' di moltiplicare prima l'importo
per 100 (senza visualizzare decimali) e poi convertirlo con il
concatena.
--
Ciao
Andrea Malfatti

VITRIOL

unread,
Mar 13, 2012, 10:11:14 AM3/13/12
to
Il 13/03/2012 15:08, Andrea Malfatti ha scritto:

> Ok, se ho capito bene se l'importo e' di 105,45 a te serve che sia
> rappresentato come 10545 giusto?

Io non ho proprio capito... se č cosě basta moltiplicare per 100 e
basta, non riesco a capire il problema della concatenazione.

--
Saluti
VITRIOL

Griso

unread,
Mar 13, 2012, 10:18:46 AM3/13/12
to

> Probabilmente la cosa piu' semplice e' di moltiplicare prima l'importo
> per 100 (senza visualizzare decimali) e poi convertirlo con il
> concatena.

non ci crederete ma ci ero arrivato anche da solo... ehehehe
mi ero perso in un bicchiere di... funzioni !

grazie

Andrea Malfatti

unread,
Mar 13, 2012, 11:06:29 AM3/13/12
to
Il Tue, 13 Mar 2012 15:11:14 +0100, VITRIOL ha scritto:

> Il 13/03/2012 15:08, Andrea Malfatti ha scritto:
>
>> Ok, se ho capito bene se l'importo e' di 105,45 a te serve che sia
>> rappresentato come 10545 giusto?
>
> Io non ho proprio capito... se è così basta moltiplicare per 100 e
> basta, non riesco a capire il problema della concatenazione.

Parte da un file CSV e deve arrivare ad un file di testo con colonne a
larghezza fissa per cui la colonna con l'importo gli serve che sia in
formato testo e composta da x caratteri, da qui parte il concatena.
--
Ciao
Andrea Malfatti

VITRIOL

unread,
Mar 13, 2012, 11:10:36 AM3/13/12
to
Il 13/03/2012 16:06, Andrea Malfatti ha scritto:

> Parte da un file CSV e deve arrivare ad un file di testo con colonne a
> larghezza fissa per cui la colonna con l'importo gli serve che sia in
> formato testo e composta da x caratteri, da qui parte il concatena.

Avevo saltato la parte iniziale del thread :-P

--
Saluti
VITRIOL
0 new messages