[R] Sqlite et les accents

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1037
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

[R] Sqlite et les accents

#1

Message par walkson »

Bonjour,
J'aimerais savoir s'il est possible d'importer un CSV avec sqlite3.exe et de conserver les accents dans la base.
En reprenant l'exemple de l'aide:
#include <File.au3>
#include <SQLite.au3>
#include <SQLite.dll.au3>
#include <StringConstants.au3>

; Filenames
Local $sTsvFile = FileGetShortName(_TempFile(@ScriptDir, "~", ".tsv"))
Local $sDbFile = FileGetShortName(_TempFile(@ScriptDir, "~", ".db"))

; Create Tsv File
FileWriteLine($sTsvFile, "é" & @TAB & "à" & @TAB & "ê")
FileWriteLine($sTsvFile, "a1" & @TAB & "b1" & @TAB & "c1")
FileWriteLine($sTsvFile, "a2" & @TAB & "b2" & @TAB & "c2")

; import (using SQLite3.exe)
Local $sIn, $sOut, $i, $sCreate = "CREATE TABLE TblImport (";
For $i = 1 To _StringCountOccurance(FileReadLine($sTsvFile, 1), @TAB) + 1
   $sCreate &= "Column_" & $i & ","
Next
$sCreate = StringTrimRight($sCreate, 1) & ");"
$sIn = $sCreate & @CRLF ; Create Table
$sIn &= ".separator \t" & @CRLF ; Select @TAB as Separator
$sIn &= ".import '" & $sTsvFile & "' TblImport" & @CRLF
_SQLite_SQLiteExe($sDbFile, $sIn, $sOut, "C:\Program Files\AutoIt3\Include\sqlite3.exe", False)

If @error = 0 Then
   ;Show Table (using SQLite3.dll)
   Local $iRows, $iColumns, $aRes
   _SQLite_Startup()
   ConsoleWrite("_SQLite_LibVersion=" & _SQLite_LibVersion() & @CRLF)
   _SQLite_Open($sDbFile)
   _SQLite_GetTable2d(-1, "SELECT ROWID,* FROM TblImport;", $aRes, $iRows, $iColumns)
   _SQLite_Display2DResult($aRes) ; Output to Console
   _SQLite_Close()
   _SQLite_Shutdown()
Else
   If @error = 2 Then
      ConsoleWrite("ERROR: Sqlite3.exe file not found" & @CRLF)
   Else
      ConsoleWrite("ERROR: @error=" & @error & " when calling _SQLite_SQLiteExe" & @CRLF)
   EndIf
EndIf
ShellExecute($sTsvFile)
MsgBox(0,"","")
; Remove Temp Files
FileDelete($sTsvFile)
FileDelete($sDbFile)

Func _StringCountOccurance($sSearchString, $sSubString, $iCaseSense = $STR_NOCASESENSE) ; Returns Number of $sSubString in $sSearchString
   Local $iOccCnt = 1
   Do
      If StringInStr($sSearchString, $sSubString, $iCaseSense, $iOccCnt) > 0 Then
         $iOccCnt += 1
      Else
         ExitLoop
      EndIf
   Until 0
   Return $iOccCnt - 1
EndFunc   ;==>_StringCountOccurance
J'obtiens ceci dans la console de Scite
_SQLite_LibVersion=3.8.11.1
 rowid  Column_1  Column_2  Column_3
 1      ?         ?         ?        
 2      a1        b1        c1      
 3      a2        b2        c2
Y a t'il un moyen pour y remédier ? merci de vos réponses
Modifié en dernier par walkson le lun. 12 sept. 2016 08:16, modifié 1 fois.
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2282
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..]Sqlite et les accents

#2

Message par jchd »

Il faut utiliser le paramètre $hPrintCallback de _SQLite_Startup pour forcer l'utilisation d'un *_ConsoleWrite qui affiche de l'UTF8 à condition que le réglage de la console soit ussi UTF8 (voir dans SciTE), sinon c'est ConsoleWrite qui est utilisé et il ne gère pas l'UTF8.
Sinon, la "CLI" (Command-Line Interface) sqlite3.exe lit "bêtement" les octets et les stocke "bêtement" dans la base, sans chercher à interpréter un encodage quelconque.
Si tu visualises le contenu de ta base avec un outil tiers (SQLite Expert par exemple) tu verras que tout doit être identique à l'entrée initiale.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1037
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Sqlite et les accents

#3

Message par walkson »

Bonjour,
Ma question portait bien sur la conversion CSV en base SQLITE et donc sans solution...
Merci pour la réponse
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2282
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Sqlite et les accents

#4

Message par jchd »

Normalement une version à jour de sqlite3.exe doit convertir un fichier .CSV correctement.
Si ce n'est pas le cas, poste un fichier qui pose problème.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1037
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [R] Sqlite et les accents

#5

Message par walkson »

Bonjour,
Comme j'avais une vieille version de sqlite3.exe, j'ai téléchargé la dernière version mais sans changement.
Je joints le CSV et la base qui m'ont servi de test. Le problème rencontré ici est le même avec d'autres CSV et je n'ai jamais réussi à obtenir des lettres accentuées correctes.
Fichiers joints
base1.zip
(817 Octets) Téléchargé 133 fois
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2282
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Sqlite et les accents

#6

Message par jchd »

Confusion de ma part : sqlite3.exe permet l'import de .CSV sous encodage UTF8 sans BOM.
Un simple FileWrite('srcu.txt', FileRead('src.txt')) fera la conversion.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre