Hallo,
mit autoit bestücke ich eine bestehende INI Datei. Da diese INI jedoch in ANSI Kodierung gespeichert ist, wir Sie aber im UTF-8 Format brauchen, wäre es schön, wenn es hier eine Möglichkeit zum "umspeichern" gibt.
Gruss Hassan
Hallo,
mit autoit bestücke ich eine bestehende INI Datei. Da diese INI jedoch in ANSI Kodierung gespeichert ist, wir Sie aber im UTF-8 Format brauchen, wäre es schön, wenn es hier eine Möglichkeit zum "umspeichern" gibt.
Gruss Hassan
Hi,
müsste eigentlich so gehen. (Ungetestet)
$hFile = FileOpen(@ScriptDir & "\Hallo.txt",16+128)
$sData = FileRead($hFile)
FileWrite(@ScriptDir &"\Test2.txt",$sData)
Hallo Sprenger120,
sorry das ich mich erst jetzt melde, hatte einiges um die Ohren.
Ich habe jetzt mal einen ersten Versuch gemacht, der aber gründlich in die Hosen ging. Am besten ich zeige Euch mal was ich mache, bzw. was ich dann fehlerhaft raus bekomme.
Von unserem Java Connector bekommen wir Daten von unserem Java Portal. Diese müssen in eine lokale Win32 Anwendung übertragen werden. Dann kommt eine Änderung in der Win32 Anwendung. Danach müssen diese Änderungen via Java Connector in das Java Portal. Den Step mit der Win32 Anwendung übernimmt Autoit. Als Datenaustausch verwenden der Java Connector und Autoit eine INI Datei, die immer das aktuelle Datum als Dateinamen hat, also am 20. Januar 2011 wäre das dann 20110120.ini
Der Erzeuger der INI Datei ist der Java Connector. Zu diesem Zeitpunkt ist es noch eine INI Datei mit ANSI Kodierung. Beim Übertragen vom Java Connector zum Java Portal wird das jedoch in UTF-8 erwartet, d.h. was im ANSI INI File ein "Ü" ist, kommt dann am Ziel als "?" an
[Blockierte Grafik: http://www.hasenmueller.de/files4forum/pics4forum_20.png]
Wir haben Testweise folgendes gemacht. Der Java Connector hat das INI File erzeugt. Dann habe ich mit Notepad++ der Inhalt in die Zwischenablage kopiert, das File geschlossen, eine neue Datei mit UTF-8 ohne BOM Kodierung geöffnet, den Inhalt aus der Zwischenablage reinkopiert und das ganze als 20110120.ini wieder gespeichert.
Öffne ich das INI File nochmals mit Notepad++ öffne, sehe ich rechts unten, das die Kodierung UTF-8 ohne BOM ist. Wenn man dann via Autoit die Änderungen in diese INI File schreibt, haben wir wieder ein ANSI INI File
Hier mal meine orginal Funktion:
[autoit]Func _func_write_ini($var_local_ini_file, $var_local_ini_sektion, $var_local_ini_key, $var_local_OUT_WERT); mit Übergabe an die Lokalen Variablen
IniWrite($var_local_ini_file, $var_local_ini_sektion, $var_local_ini_key, $var_local_OUT_WERT); Zurückschreiben des jeweiligen Wertes in den Schlüssel einer Sektion
EndFunc ;==>_func_write_ini
und hier mal modifizert - was aber nicht geht:
[autoit]Func _func_write_ini($var_local_ini_file, $var_local_ini_sektion, $var_local_ini_key, $var_local_OUT_WERT); mit Übergabe an die Lokalen Variablen
IniWrite($var_local_ini_file, $var_local_ini_sektion, $var_local_ini_key, $var_local_OUT_WERT); Zurückschreiben des jeweiligen Wertes in den Schlüssel einer Sektion
$varINIOpen = FileOpen($var_local_ini_file, 256)
$varINIRead = FileRead($varINIOpen)
FileWrite($var_local_ini_file, $varINIRead)
EndFunc ;==>_func_write_ini
Bevor ich das INI File beschreibe, sieht es so aus:
[Aktueller BGS]
IN_BGS_NR = 17113536286657
[17113536286657]
IN_KFZ = www
IN_KFZ_ANHAENGER =
IN_VOLUMEN =
IN_ERZ_BEH_NR = AFUM10001
IN_BEF_BEH_NR = AFUM00047
IN_ENT_BEH_NR = AFUM10002
IN_ENSN_NR = ENI000000003
IN_AVV_NR = 130101
Alles anzeigen
Danach sieht es so aus:
[Aktueller BGS]
IN_BGS_NR = 17113536286657
[17113536286657]
IN_KFZ = www
IN_KFZ_ANHAENGER =
IN_VOLUMEN =
IN_ERZ_BEH_NR = AFUM10001
IN_BEF_BEH_NR = AFUM00047
IN_ENT_BEH_NR = AFUM10002
IN_ENSN_NR = ENI000000003
IN_AVV_NR = 130101
OUT_GEWICHT=54221
OUT_KFZ=SÜD-WB123
[Aktueller BGS]
IN_BGS_NR = 17113536286657
[17113536286657]
IN_KFZ = www
IN_KFZ_ANHAENGER =
IN_VOLUMEN =
IN_ERZ_BEH_NR = AFUM10001
IN_BEF_BEH_NR = AFUM00047
IN_ENT_BEH_NR = AFUM10002
IN_ENSN_NR = ENI000000003
IN_AVV_NR = 130101
OUT_GEWICHT=54221
[Aktueller BGS]
IN_BGS_NR = 17113536286657
[17113536286657]
IN_KFZ = www
IN_KFZ_ANHAENGER =
IN_VOLUMEN =
IN_ERZ_BEH_NR = AFUM10001
IN_BEF_BEH_NR = AFUM00047
IN_ENT_BEH_NR = AFUM10002
IN_ENSN_NR = ENI000000003
IN_AVV_NR = 130101
OUT_GEWICHT=54221
OUT_KFZ=S?D-WB123
[Aktueller BGS]
IN_BGS_NR = 17113536286657
[17113536286657]
IN_KFZ = www
IN_KFZ_ANHAENGER =
IN_VOLUMEN =
IN_ERZ_BEH_NR = AFUM10001
IN_BEF_BEH_NR = AFUM00047
IN_ENT_BEH_NR = AFUM10002
IN_ENSN_NR = ENI000000003
IN_AVV_NR = 130101
OUT_GEWICHT=54221
Alles anzeigen
Die Datei ist zu diesem Zeit IMMER noch ANSI Kodiert!
Die Sektion in der INI Datei sollte 1 mal vorhanden sein, nicht zig mal.
Jetzt bin ich mal auf Eure Antworten gespannt, wie ein Flitzebogen
Gruss Hassan
Neue Erkenntnis
Habe im Forum ein wenig nach ähnlichen Problemen gesucht und jetzt bin ich der Sache schon etwas näher
Hier mal die neue Funktion:
[autoit]Func _func_write_ini($var_local_ini_file, $var_local_ini_sektion, $var_local_ini_key, $var_local_OUT_WERT); mit Übergabe an die Lokalen Variablen
IniWrite($var_local_ini_file, $var_local_ini_sektion, $var_local_ini_key, $var_local_OUT_WERT); Zurückschreiben des jeweiligen Wertes in den Schlüssel einer Sektion
$textuisystem_handle = FileOpen($var_local_ini_file, 256)
$textuisystem_final_handle = FileOpen($var_ini_utf8_file, 258)
$line = 0
While 1
$textuisystem_contents = FileReadLine($textuisystem_handle, $line)
If @error = -1 Then ExitLoop
FileWrite($textuisystem_final_handle, $textuisystem_contents & @CRLF)
$line += 1
WEnd
FileClose($textuisystem_handle)
FileClose($textuisystem_final_handle)
FileDelete($var_local_ini_file)
FileCopy($var_ini_utf8_file, $var_local_ini_file, 9)
EndFunc ;==>_func_write_ini
Das entsprechende INI File sieht in Notepad++ jetzt so aus:
[Blockierte Grafik: http://www.hasenmueller.de/files4forum/pics4forum_21.png]
Im Klartext soll das so sein:
OUT_KFZ=SÜD-ÄÖß
In der eigentlichen Anwendung, also das Ziel, sieht es dann so aus.
[Blockierte Grafik: http://www.hasenmueller.de/files4forum/pics4forum_22.png]
Warum kommt das jetzt immer noch so komisch an ?
Nachtrag:
Abgesehen davon das die Kodierung noch nicht passt, habe ich noch ein weiteres Problem. Die INI Datei ist ja - wie man am Datum erkennen kann - jeweils 1 Tag gültig, d.h. am nächsten Tag gibt es eine neue Datei.
Die INI Datei pro Tag füllt sich aber um einige Sektionen. Ab dem 2. Sektionseintrag will Autoit dann eine "ANSI as UTF8" Datei in eine "ANSI as UTF8" Datei wandeln. Was dabei rauskommt, kann sich jeder selbst denken
Gruss Hassan
Hi,
vielleicht hilft Dir das hier weiter:
[ gelöst ] AutoIt und UNICODE (UTF-8) - Funktioniert nicht?
LG
Schnuecks
Also mit folgender Funktion geht es jetzt bei mir:
[autoit]Func _func_write_ini($var_local_ini_file, $var_local_ini_sektion, $var_local_ini_key, $var_local_OUT_WERT); mit Übergabe an die Lokalen Variablen
IniWrite($var_local_ini_file, $var_local_ini_sektion, $var_local_ini_key, $var_local_OUT_WERT); Zurückschreiben des jeweiligen Wertes in den Schlüssel einer Sektion
$textuisystem_handle = FileOpen($var_local_ini_file, 16)
$textuisystem_final_handle = FileOpen($var_ini_utf8_file, 266)
$line = 0
While 1
$textuisystem_contents = FileReadLine($textuisystem_handle, $line)
If @error = -1 Then ExitLoop
FileWrite($textuisystem_final_handle, $textuisystem_contents & @CRLF)
$line += 1
WEnd
FileClose($textuisystem_handle)
FileClose($textuisystem_final_handle)
FileDelete($var_local_ini_file)
FileCopy($var_ini_utf8_file, $var_local_ini_file, 9)
EndFunc ;==>_func_write_ini
Gruss Hassan