Ho trasferito dei dati da una tabella Access a Postgres su campi char e i caratteri accentati e non solo, mi appaiono come nell'immagine. Come dovrei procedere per evitare questo inconveniente?
Devi usare Conv$:
StringaUTF-8 = Conv$(StringaNonUTF , "WINDOWS-1253", "UTF-8")
Dando un'occhiata al tuo provacvs. mi sono avventurato ad un inserimento nel database postgres via codice ed ho sviluppato questo che segue:
Public Sub Button1_Click()
'------------------------------->correzione file csv
Dim pFile, tmp, prima, seconda, terza As String
Dim partial As String[]
Dim Fil As File
partial = New String[]
pFile = vp.AppPath & "DB/merce.csv"
Fil = Open pFile For Read
While Not Eof(Fil)
Line Input #Fil, tmp
If Len(tmp) > 1 Then
partial = Split(tmp, ";") 'il carattere ; suddivide i campi nel file csv
If Len(partial[0]) > 1 Then
prima = Conv(partial[0], "WINDOWS-1253", "UTF-8") 'corrisponde a campo NOME
Endif
If Len(partial[1]) > 1 Then
seconda = Conv(partial[1], "WINDOWS-1253", "UTF-8") ' " CODICE
Endif
If Len(partial[2]) > 1 Then
terza = Conv(partial[2], "WINDOWS-1253", "UTF-8") ' " DITTA
Endif
$Con.Begin
res = $Con.Create("prova")
If res.Available Then
res!nome = prima
res!codice = seconda
res!ditta = terza
res.Update
Endif
$Con.Commit
Endif
Wend
Fil.Close
Catch
$Con.Rollback
Message.Error(Error.Text)
End
ma ho un problema banale....beh, non tanto banale. Nel file csv le voci vengono presentate così:
"penellini per colorare"; "3MCB";"Ferrari" e il mio problema è che, trattando queste voci come stringa, come puoi notare dal codice, mi ritrovo le virgolette anche dentro al campo Postgres.
Verrebbe spontaneo pensare ad un replace , ma non ho cavato un ragno dal buco per il fatto che stiamo parlano di virgolette e fare un Replace di 'virgolette' è veramente un problema.
Hai suggerimenti?
Ci sarebbe UnQuote ma con i file non funziona, boh.
Puoi fare così:
If res.Available Then
res!nome = Replace(prima, "\"", "")
res!codice = Replace(seconda, "\"", "")
res!ditta = Replace(terza, "\"", "")
res.Update
Endif
:)
Ho capito cosa non andava nella mia prova con UnQuote gli danno fastidio gli eventuali spazi all'inizio o in fondo.
res!nome = UnQuote(Trim(prima))
funziona.
Il vantaggio di UnQuote rispetto a Replace è che se tu hai nella stringa che passi dal file delle virgolette interne che devono rimanere UnQuote le lascia mentre Replace le toglie tutte.