PDA

Visualizza versione completa : Unire 2 file CSV ...come ?


1enry1
22-12-2016, 14.57.01
quesito per un vero mago di office:


ho un database CSV con vari campi (nome, citta, stato ecc.... )

ora con un nuovo aggiornamento ALCUNI campi in questo

database non sono stati piu messi !


c'e una possibilita' e ovvio in modo "veloce" di fare una specie

di MERGE dei 2 databse in modo che quando ho il NUOVO

database dove mancano appunti alcuni campi , posso unire con

i dati del vecchio db che li ha tutti? credo sia fattibile ma come ?



magari per velocizzare visto che sono oltre 45.000 voci !

uno script , e meglio dite usare Excell o OpenOffice ?


grazie a chi mi sapra' aiutare :rolleyes:



PS devo ancora aprirlo, come si capisce se fatto con excell o con access ?

borgata
23-12-2016, 02.00.47
Il CSV è un formato di testo, puoi unire i file con il blocco note (magari uno un po' serio tipo notepad++).

Per i campi mancanti devi aggiungere delle virgole (due virgole affiancate significano un campo vuoto) se vuoi utilizzare il formato del file con più voci o eliminare le voci in eccesso se vuoi utilizzare il formato con meno voci.

A mio parere la sostituzione potrebbe essere fattibile con un'espressione regolare ben scritta, l'uso della virgola come separatore dovrebbe consentire un riconoscimento dei campi abbastanza semplice se non ci sono virgole all'interno dei dati (questo complicherebbe un po' le cose).

In alternativa dovrebbe essere possibile importare il file all'interno di un programma come calc o excel sfruttando i nomi delle colonne: la routine di importazione dovrebbe associare le colonne correttamente.

1enry1
06-01-2017, 14.24.15
devo unire 2 database fatti cosi :

http://i63.tinypic.com/2ebu0qr.jpg

http://i63.tinypic.com/2ebu0qr.jpg

strano pero' che in Excell sia tutto una riga e senza i vari campi , tipo nome, citta nazione , boh ?
mentre in Calc appaiono separati ma sempre TUTTI i gruppi sotto la voce "Standard"...

ora premesso che non ci capisco una mazza, come faccio s fondere il NUOVO data base dove mancano alcune voci ( tipi cognome, citta, stato) quindi c'e solo CALL e Nazione ...con uno vecchio dove ci sono TUTTI i campi ?

pare si possa fare tutto con CALC ? ma come faccio ?
grazie x aiuto, mi raccomando spiegatemi in modo semplice grazie

Alexsandra
07-01-2017, 00.45.24
quando esporti un file in csv excel te lo importa con quel sistema, cioè separa i vari campi con le virgole e ogni record per riga. i dati ci sono tutti.

c'è da capire una cosa.

1) hai un DB in excel e uno in calc.?
2) dove li vuoi unire? in excel?
3) e vuoi mettere 1 campo per ogni cella?

tof63
07-01-2017, 12.02.12
Più che altro credo che 1enry1 abbia "aperto" con excel il file csv, anzichè, partendo da una tabella vuota, selezionato dal menù Dati/Importa dati esterni.
Avendo poi le due tabelle excel, è sufficiente modificare quella con meno colonne aggiungendo delle colonne vuote in corrispondenza di quelle mancanti nell'altra tabella e poi copiare tutte le righe della tabella elaborata al fondo di quella con più colonne.

borgata
07-01-2017, 12.03.08
Se assenti, prova ad assegnare tu i nomi alle colonne prima di importare.
La prima riga del file CSV contiene i nomi delle colonne.

Se i nomi delle colonne sono impostati correttamente, la routine di importazione dovrebbe unire adeguatamente le colonne.
Una volta creato il file unico, lo esporti nuovamente come csv.

@Alexsandra
Non credo abbia dei database, ma solo dei file CSV che lui ha provato ad importare in calc ed excel.
Di conseguenza penso li voglia unire come unico file CSV, non importa se in calc o in excel.

Alexsandra
07-01-2017, 21.07.15
si può darsi, però ha tutti i dati in una cella e ogni record per riga.
secondo me dovrebbe fare come suggerito da tof63 e unire i 2 DB poi caso mai con una macro leggere dove stanno le virgole e mettere 1 dato per cella estendendosi sulle colonne.

facendo così sarebbe +' comodo esportare in txt, unire il tutto e poi importare in excel con una macro

1enry1
09-01-2017, 15.58.34
si esatto ho 2 database CSV .... nella foto aperto sia con execell che con calc.

come dicevo nel vecchio ho 44.000 voci come vedete con TUTTI i vari dati.

nel nuovo database csv siamo a 50.000 voci ma con alcuni campi senza dati dentro.

volevo unire i due database cosi ho 50.000 nuove voci, ma con le 44.000 con le
parti mancanti nel nuovo ma presentei nel vecchio.


aiutooooo...come si fa ?

Alexsandra
09-01-2017, 23.41.41
a me serve una demo, che potrebbe essere 2 file csv con 4-5 righe di dati (a caso)

oppure 2 file txt sempre con 4-5 righe di dati per poter fare delle prove.

poi ti metto la macro che ti raccoglie e unisce i 2 DB.

PS: se c'è un campo vuoto dovrebbe esserci 2 virgole attaccate. prova a verificare se è così

borgata
10-01-2017, 00.54.43
si esatto ho 2 database CSV ....
I file CSV sono file di testo, non basi di dati (per lo meno nel senso comune, se generalizziamo quasi qualunque cosa può essere un base di dati).

Secondo me la stiamo facendo troppo difficile, unire due file csv è quasi banale, teoricamente non dovrebbe servire altro che un blocco note e magari qualche espressione regolare per aggiustare dove ci sono i campi mancanti.

Alexsandra
10-01-2017, 09.56.10
...
Secondo me la stiamo facendo troppo difficile, unire due file csv è quasi banale, teoricamente non dovrebbe servire altro che un blocco note e magari qualche espressione regolare per aggiustare dove ci sono i campi mancanti.
indubbiamente, basta ctrl+c e ctrl+v per fare il tutto.

LoryOne
10-01-2017, 12.03.42
Si, ma quale dei due csv deve fornire l'elenco delle colonne completo ?
Inoltre, cosa ne sai che le 40.000 righe del primo sono già incluse in quello da 50.000 ?
...e se una o più righe del 40.000 fossero sostituite da una o più righe del 50.000 ?

borgata
10-01-2017, 14.51.13
@Loryone

A fornire le colonne mi pare di capire che deve essere il file CSV con più colonne, che quindi contiene dei dati in più che in caso contrario andrebbero persi.
Data la non corrispondenza dei due schermi CSV, se si usa un blocco note, occorre nel file con meno colonne aggiungere le virgole dove serve.

I duplicati non dovrebbero essere un problema, si è parlato solo di unire i due file per crearne uno unico. Probabilmente è stato usato uno dei due fino ad una certa data, poi si è proseguito con il secondo a cui sono state aggiunte delle colonne nuove.

Se avessimo i file o per lo meno un loro sottoinsieme, sarebbe facile creare l'espressione regolare che aggiunga in automatico le virgole dove serve (a meno che non ci siano virgole nei dati, il che complicherebbe le cose).

1enry1
13-01-2017, 11.48.23
si esatto il vecchio ha tutti i dati, nel nuovo oltre a DATI nuovi , nei vecchi per la privacy hanno trolo molti dati nei vari campi , ecco perche unire i due per avere almeno nei vecchi dati anche i campi che nel nuovo hanno tolto per la privacy ...ok ora ?


ok come faccio a mandarvi un campo completo cosi vedete la cosa ? come faccio ?

1enry1
13-01-2017, 11.57.00
Alexandra NON credo sia cosi semplice c'e gente e pare (?) abbastanza esperta che ci sta provando e sta diventando pazza.... quindi mi sa non sia cosi banale con un
semplice copia e incolla..... boh


anche perche facendo cosi copiando il nuovo nel vecchio , manterrebbe tutti i dati dei vecchi campi che sono spariti nel nuovo ? grazie

borgata
13-01-2017, 12.11.30
Se la situazione è quella che descrivi, a me il problema pare di semplice soluzione.

I dati direi che non puoi condividerli qui, per questioni di privacy.
Puoi però creare due file CSV di esempio prendendo le prime 5-10 righe dei due file e modificandone il contenuto.
Almeno in questo modo possiamo vedere con cosa abbiamo a che fare.

A mi parere le soluzioni più semplici sono due:

1) Unire i due file di testo, dopo aver aggiunto al file CSV più recente le "colonne" mancanti (ossia aggiungendo delle virgole dove serve, tramite espressione regolare).
Serve solo un blocco note con supporto alle RE. Consigliata in caso di campi non contenenti virgole.

2) Importare il file CSV più recente (e solo quello) in libreoffice calc. Aggiungere le colonne mancanti, salvare in CSV. Unire i due file di testo (il CSV con i vecchi dati e il CSV appena creato con libreoffice).
Necessari Libreoffice Calc e un blocco note decente. Consigliato nel caso di campi più complessi.

NOTA: sto dando per scontato che tu voglia mantenere i dati vecchi che sono poi stati eliminati nel nuovo CSV per questione di privacy.
Nel caso in cui invece tu voglia cancellare quei dati, allora la procedura di sopra è simile, ma anziché aggiungere le "colonne" al nuovo file occorre eliminare le colonne dal vecchio.

Alexsandra
13-01-2017, 16.16.45
grazie
Prego ;)

provo a spiegarmi meglio, poi ognuno fa quello che crede.

se apri un file csv, nella 1° riga trovi le intestazioni delle colonne, separate da virgole e sono i nomi dei campi del DB (o tabella) da cui provengono i dati.

nel 2° file devi avere le stesse intestazioni (se provengono dallo stesso DB)

prima di unire i 2 file si deve fare una considerazione, se certi dati mancano in un file per effetto della privacy non è stata modificata la struttura del DB, ma semplicemente è stato esportato un campo vuoto e nel csv troverai 2 virgole attaccate, che indicano un campo vuoto.

ora è possibile unire i 2 file facendo semplicemente ctrl+c e ctrl+v basta solo che del 2° file copi solo i dati e non le intestazioni e li incolli nella 1° riga libera della colonna A del 1° file.
poi per sicurezza salva con nome diverso.

se noti in colonna A c'è un codice, basta una semplice macro per eliminare eventuali doppioni e sempre via macro si deve andare a leggere ogni riga (che è 1 record) incrementando le colonne e scrivere 1 dato per cella estendendosi nelle colonne.

come si dice quì
http://forum.wintricks.it/showpost.php?p=1698747&postcount=69

Ovviamente il 1° dato che incontro leggendo il file csv avrà come intestazione di colonna la 1° intestazione che trovo nella riga delle intestazioni, il 2° dato dopo la virgola avrà come intestazione la 2° e così via.