- Home
- Categorie
- Coding e Sistemistica
- Altri linguaggi per il web
- [ASP] Importazione di file CSV in DB Access
-
[ASP] Importazione di file CSV in DB Access
Ciao a tutti.
Mi sono appena registrato a questo forum e spero ricevere molte risposte ai miei numerosi dubbi su ASP.
Questo è il problema di oggi :
Riesco tramite ASP a leggere queste stringhe da un file CSV ed a inserirle in una tabella access:
29/06/2008 00:15:48 29/06/2008 00:34:54 29/06/2008 07:28:03 29/06/2008 07:38:03 29/06/2008 08:52:33 29/06/2008 12:43:14 29/06/2008 13:18:58 29/06/2008 14:26:04 29/06/2008 15:28:05 29/06/2008 15:39:13 29/06/2008 15:42:54 29/06/2008 16:09:16 29/06/2008 17:18:46 29/06/2008 19:27:23 29/06/2008 21:27:23
E' possibile saltare l'importazione di alcune di queste righe?
Per esempio la seconda riga ha una data/orario che si differenzia dalla prima di soli 20 minuti circa e quindi andrebbe esclusa... la quarta riga ha una data/orario che si differenzia dalla quarta di soli 10 minuti e quindi andrebbe esclusa... etc, etc...
Il criterio dovrebbe essere che tra le righe susseguenti per essere importate in access la differenza deve sempre essere superiore a 30 minuti.
E' possibile?
Saluti
-
Certo che è possibile, penso che tu abbia implementato un ciclo che legge riga per riga finquando non finisce il file ed inserisce i dati nel db, puoi sempre fare un controllo tra l'ora del precedente record e quella del record successivo se la differenza in minuti è maggiore di 30 allora inserisci nel db.
uno pseudo codice:
precedentedataora = "01/01/1900 00:00:00" while (il file non è stato letto tutto) dataoraattuale = leggilineadelfile if datediff("n",precedentedataora ,dataoraattuale) >= 30 then inserisci il tutto nel db precedentedataora = dataoraattuale end if wend
se hai dei dubbi sul codice posta pure
-
@tonyx said:
Certo che è possibile, penso che tu abbia implementato un ciclo che legge riga per riga finquando non finisce il file ed inserisce i dati nel db, puoi sempre fare un controllo tra l'ora del precedente record e quella del record successivo se la differenza in minuti è maggiore di 30 allora inserisci nel db.
uno pseudo codice:
> precedentedataora = "01/01/1900 00:00:00" while (il file non è stato letto tutto) dataoraattuale = leggilineadelfile if datediff("n",precedentedataora ,dataoraattuale) >= 30 then inserisci il tutto nel db precedentedataora = dataoraattuale end if wend >``` se hai dei dubbi sul codice posta pure Grazie per aver risposto ed avermi dati almeno la speranza che si può fare. Non ho ben capito il tuo suggerimento, forse se ti posto il codice originale, puoi spiegarmi meglio, ti dispiace ? :D :
PercorsoCSV = "D:\Inetpub\wwwroot\Folder\test.csv "
'//INIZIALIZZO L'OGGETTO FSO
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")'//APRO IL FILE CSV
Set objFile = objFSO.OpenTextFile(PercorsoCSV)'//SALTO LA PRIMA RIGA DELLE INTESTAZIONI
objFile.SkipLine()'//INIZIO CICLO
Do While Not objFile.AtEndOfStream'//LEGGO RIGA PER RIGA
strText = objFile.readLine'//SPLITTO IL TESTO PER VIRGOLA PER IL NUMERO VALORI DA LEGGERE PER RIGA
arrText = split(strText, ",", 17)'//INSERISCO NEL DB ACCESS
strSql = "INSERT INTO ... "
cn.execute(strSql)'//FINE CICLO
Loop'//CHIUDO E DISTRUGGO OGGETTO
objFile.Close()
Set objFile = Nothing'//DISTRUGGO OGGETTO
Set objFSO = Nothing
-
Dunque ho risolto in parte, il codice aggiornato è questo:
PercorsoCSV = "D:\Inetpub\wwwroot\Folder\test.csv " '//INIZIALIZZO L'OGGETTO FSO Set objFSO = Server.CreateObject("Scripting.FileSystemObject") '//APRO IL FILE CSV Set objFile = objFSO.OpenTextFile(PercorsoCSV) '//SALTO LA PRIMA RIGA DELLE INTESTAZIONI objFile.SkipLine() '//DATA DI PARTENZA precedentedataora = "01/01/1900 00:00:00" '//INIZIO CICLO Do While Not objFile.AtEndOfStream '//LEGGO RIGA PER RIGA strText = objFile.readLine '//SPLITTO IL TESTO PER VIRGOLA PER IL NUMERO VALORI DA LEGGERE PER RIGA arrText = split(strText, ",", 17) '//COSTRUZIONE STRINGA PER CONFRONTO DataCostruita = convertDate(replace(arrText(2), """", "")) OraCostruita = replace(arrText(3), """", "") strDataOraCostruita = DataCostruita & " " & OraCostruita '//CONTROLLO ORARIO if datediff("n", precedentedataora, strDataOraCostruita) >= 30 then '//INSERISCO NEL DB ACCESS strSql = "INSERT INTO ... " cn.execute(strSql) precedentedataora = strDataOraCostruita '//FINE CONTROLLO ORARIO end if '//FINE CICLO Loop '//CHIUDO E DISTRUGGO OGGETTO objFile.Close() Set objFile = Nothing '//DISTRUGGO OGGETTO Set objFSO = Nothing
Ed in effetti quando l'orario tra una riga e l' altra è inferiore a 30 minuti non la registra: è già un buon passo.
Mi sono reso conto, però, che ho un altra difficoltà da superare:
- La riga del file CSV va esclusa non solo quando l'ora del precedente record e quella del record successivo presentano una differenza in minuti è maggiore di 30, ma anche quando i dati del precedente record e quelli del record successivo sono uguali...
Che problema...
-
e non te la esclude comunque?
Quando i due record sono uguali i 30 min di differenza non ci sono quindi dovrebbe comunque escluderlo.
-
@tonyx said:
e non te la esclude comunque?
Quando i due record sono uguali i 30 min di differenza non ci sono quindi dovrebbe comunque escluderlo.Grazie, ho risolto prevedendo un'ulteriore condizione if... end if