Page 2 sur 2
Re: [..] Traitement de fichier texte unicode
Posté : jeu. 13 oct. 2011 17:20
par pierrotm777
D:\Program Files\Ride Runner\Plugins\RRWebRadio\test.au3 (12) : ==> Subscript used with non-Array variable.:
For $i=1 To $array[0]
For $i=1 To $array^ ERROR
Re: [..] Traitement de fichier texte unicode
Posté : jeu. 13 oct. 2011 17:22
par PandiPanda
hmm le fichier .txt est bel et bien dans le meme répertoire du script?

sinon faudra mettre le path adéquat ... dans
Code : Tout sélectionner
_FileReadToArray([color=#FF0000]@ScriptDir&"\test_unicode.txt"[/color],$array)
Re: [..] Traitement de fichier texte unicode
Posté : jeu. 13 oct. 2011 17:24
par mikell
La gaffe

Re: [..] Traitement de fichier texte unicode
Posté : jeu. 13 oct. 2011 17:28
par pierrotm777
Le script était au mauvais endroit, quel idiot

.
Mais mon but final est un fichier texte formaté différemment !

Re: [..] Traitement de fichier texte unicode
Posté : jeu. 13 oct. 2011 17:29
par pierrotm777
J'ai essayé ça mais avec le même pb !
_FileWriteFromArray(@ScriptDir&"\test_unicode_new2.txt",$__pierrotm777)
Re: [..] Traitement de fichier texte unicode
Posté : jeu. 13 oct. 2011 17:35
par mikell
Code : Tout sélectionner
$file2 = FileOen(@ScriptDir&"\test_unicode_new2.txt", [color=#FF0000]129[/color])
_FileWriteFromArray($file2,$__pierrotm777)
Re: [..] Traitement de fichier texte unicode
Posté : jeu. 13 oct. 2011 18:10
par PandiPanda
ceci vous convient? ^^
► Afficher le texte
Code : Tout sélectionner
#Include <File.au3>
#Include <Array.au3>
Dim $__pierrotm777[8]
_Test()
Func _Test()
Local $array
_FileReadToArray(@ScriptDir&"\test_unicode.txt",$array)
Local $array2
For $i=1 To $array[0]
$array2=StringSplit($array[$i],Chr(9),"array secondaire")
_PutArray($array2)
_FileWritePierrotm777()
Next
EndFunc
Func _PutArray($array)
$__pierrotm777[0]=$array[1]
$__pierrotm777[1]=$array[2]
$__pierrotm777[2]=$array[3]
$__pierrotm777[3]=$array[4]
$__pierrotm777[4]=$array[6]
$__pierrotm777[5]=$array[10]
$__pierrotm777[6]=$array[11]
$__pierrotm777[7]=$array[12]
EndFunc
Func _FileWritePierrotm777()
Local $str=$__pierrotm777[0]&" : "&$__pierrotm777[1]&" : "&$__pierrotm777[2]&" : "&$__pierrotm777[3]&" : "&$__pierrotm777[4]&" : "& _
$__pierrotm777[5]&" : "&$__pierrotm777[6]&" : "&$__pierrotm777[7]&@CRLF
Local $open=FileOpen(@ScriptDir&"\Pierrotm777.txt",1+32)
If Not @error Then FileWrite($open,$str)
EndFunc
*Suis pas un expert, mais une grande difference entre UTF16 et UTF8 ? ^^
Re: [..] Traitement de fichier texte unicode
Posté : jeu. 13 oct. 2011 22:10
par jchd
Je suppose que le problème initial tient dans le fait que le fichier texte est au format UTF8 _sans_ BOM. Il n'y a pas de moyen sûr de déterminer par programme si c'est UTF-8 sans BOM ou ANSI ou autre. Le même fichier en UTF-8 avec BOM fonctionne sans problème et sans avoir à rajouter le flag 128 (cf. FileOpen).
Re: [..] Traitement de fichier texte unicode
Posté : ven. 14 oct. 2011 14:47
par pierrotm777
Bon , he bien merci à tous de votre intérêt pour mon problème.
Je viens de réaliser que puisque tout allait bien jusqu'à la mise en tableau, le problème venait après !
En fait le problème survient à la sauvegarde dans la fonction _SaveNewFile dans laquelle la fonction FileOpen
n'ouvre pas le nouveau fichier en UTF8:
J'ai donc remplacé :
par
Et là, je conserve bien mes textes en Russe !
La fonction modifiée:
► Afficher le texte
Code : Tout sélectionner
Func _SaveNewFile($Fichier, $sVilles)
Local $szDrive, $szDir, $szFName, $szExt, $Path
$Path = _PathSplit($Fichier, $szDrive, $szDir, $szFName, $szExt)
$Fichier = $szDrive & $szDir & $szFName & "_New" & $szExt
$hFichier = FileOpen($Fichier, 130)
If $hFichier = -1 Then
MsgBox(0, "Erreur", "Impossible de traiter le fichier :" & @CRLF & $Fichier)
Return
EndIf
FileWrite($hFichier, $sVilles)
FileClose($hFichier)
EndFunc ;==>_SaveNewFile
Pas besoin donc d'un _FileReadToArray modifié !
Le script complet est le suivant !
► Afficher le texte
Code : Tout sélectionner
#include <Array.au3>
#include <File.au3>
;Dim $File = @ScriptDir&"\FR.txt", $aArray, $ZipDat
;Dim $File = @ScriptDir&"\allCountries.txt", $aArray, $ZipDat
Dim $File = @ScriptDir&"\test_unicode.txt", $aArray, $ZipDat
_FileReadToArray($File,$aArray)
;_ArrayDisplay($aArray)
If IsArray($aArray) Then
$aArray = _DoIt($aArray)
$ZipDat = _ArrayToString($aArray, @CRLF)
EndIf
If $ZipDat <> "" Then _SaveNewFile($File, $ZipDat)
Func _DoIt($aVilles)
Local $x, $Var, $Var2, $Longitude, $Latitude, $NomVille, $ZipCode
For $x = 1 to $aArray[0]
; Msgbox(0,'Record:' & $x, $aArray[$x])
$Var = StringSplit(StringReplace($aArray[$x],@LF,@CRLF),@TAB)
$NomVille = $Var[3]
If StringInStr($Var[2],"CEDEX") Then ContinueLoop;bloque toutes les lignes CEDEX
; $ZipCode = StringLeft($Var[2],5)
$ZipCode = $Var[2]
$Region = $Var[4]
$Departement = $Var[7]
If $Var[10] > 0 Then
$Latitude = "+"&$Var[10]
Else
$Latitude = $Var[10]
EndIf
If $Var[11] > 0 Then
$Longitude = "+"&$Var[11]
Else
$Longitude = $Var[11]
EndIf
$aVilles[$x] = '"'& $ZipCode & '","' & $Latitude & '","' & $Longitude & '","' & $NomVille & '","'& $Departement & '","' & $Region &'",""'
Next
_ArraySort($aVilles)
_ArrayDelete($aVilles, 0) ; On supprime le nombre d'élément du tableau
Return $aVilles
EndFunc ;==>_DoIt
Func _SaveNewFile($Fichier, $sVilles)
Local $szDrive, $szDir, $szFName, $szExt, $Path
$Path = _PathSplit($Fichier, $szDrive, $szDir, $szFName, $szExt)
$Fichier = $szDrive & $szDir & $szFName & "_New" & $szExt
$hFichier = FileOpen($Fichier, 130); 2+128 où 128 permet la création d'un fichier au format UTF8 unicode
If $hFichier = -1 Then
MsgBox(0, "Erreur", "Impossible de traiter le fichier :" & @CRLF & $Fichier)
Return
EndIf
FileWrite($hFichier, $sVilles)
FileClose($hFichier)
EndFunc ;==>_SaveNewFile
Merci encore une fois à tous !
Re: [R] Traitement de fichier texte unicode
Posté : sam. 15 oct. 2011 15:54
par pierrotm777
Juste une dernière question .
Je me suis rendu compte que les lignes comportant le mot CEDEX étaient bien non traitées, mais n'étaient pas effacées du
fichier final, la faute, je pense à la fonction ContinueLoop.
J'ai donc remplacé la ligne:
Code : Tout sélectionner
If StringInStr($Var[2],"CEDEX") Then ContinueLoop;bloque toutes les lignes CEDEX
par la ligne
Code : Tout sélectionner
If StringInStr($Var[2],"CEDEX") Then _ArrayPop($Var);bloque toutes les lignes CEDEX
Cela semble fonctionner !
Ma question est juste ! Es ce la bonne méthode pour effacer les lignes non utiles ?

Re: [R] Traitement de fichier texte unicode
Posté : sam. 15 oct. 2011 16:03
par pierrotm777
J'ai aussi ajouté l’effacement de la dernière ligne du tableau, (nombre de lignes du tableau) inutile .
Juste ajouter après la ligne:
Code : Tout sélectionner
_ArrayDelete($aVilles, 0) ; On supprime le nombre d'élément du tableau
la ligne suivante:
Code : Tout sélectionner
_ArrayDelete($aVilles, $aArray[0]) ; On supprime le dernier élément du tableau