Textdatei mit komma-trennung auflösen

03/14/2012 15:11 Flummi1988#1
Zum einen entschuldigung wenn es dazu schon ein thread gibt, ich habe ihn nicht gefunden.

Ich habe folgendes Problem. Ich habe eine Listbox die so aufgebaut
ist.

$ListView1 = GUICtrlCreateListView("Barcode|EAN|Zeit|Datum|Gesc häft|Ware|Kategorie|Stück|Einzelpreis", 8, 224, 746, 342)

In der Textdatei stehen die werte zu den "Posten" mit komma trennung wie bekomme ich die Daten in die jeweilige Spalte ?

also so:

barcode,ean,zeit,datum,...

Leider kann ich die kommas nicht verhindern da diese Textdatei von einem Anderen Programm erstellt wird.

Die Textdatei an sich einlesen ist klar,
In die Textdatei Schreiben auch, aber die blöden komma-trennungen bekomme ich nicht aufgelöst.

LG flummi1988
03/14/2012 15:25 jacky919#2
Verwende [Only registered and activated users can see links. Click Here To Register...].
03/14/2012 15:45 Flummi1988#3
Also wenn ich es richtig verstehe theoretisch so ?

$file = FileOpen("liste.txt", 0)
$data = StringSplit(FileReadLine($file), ",")
FileClose($file)

hm. danke erstmal.

muss ich dann die $data direkt der listview übergeben oder gehört da noch ein zwischen schritt zu ? und egal welcher der beiden möglichkeiten wie ?

das sieht jetzt in der au3 so aus

#include <GUIConstants.au3>

#NoTrayIcon
$Form1 = GUICreate("Barcodelister", 759, 606, 201, 55)
$ListView1 = GUICtrlCreateListView("Barcode|EAN|Zeit|Datum|Gesc häft|Ware|Kategorie|Stück|Einzelpreis", 8, 224, 746, 342)
GUICtrlSendMsg(-1, 0x101E, 0, 100)
GUICtrlSendMsg(-1, 0x101E, 1, 50)
GUICtrlSendMsg(-1, 0x101E, 2, 60)
GUICtrlSendMsg(-1, 0x101E, 3, 60)
GUICtrlSendMsg(-1, 0x101E, 4, 150)
GUICtrlSendMsg(-1, 0x101E, 5, 120)
GUICtrlSendMsg(-1, 0x101E, 6, 80)
GUICtrlSendMsg(-1, 0x101E, 7, 50)
GUICtrlSendMsg(-1, 0x101E, 8, 70)
$file = FileOpen("liste.txt", 0)
$data = StringSplit(FileReadLine($file), ",")
FileClose($file)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
03/14/2012 16:11 Croco™#4
Mit einer For Schleife musst du jetzt jedes gefundene Element des Arrays der ListView übergeben.
GuiCtrlCreateListViewItem ist glaube ich der Befehl dazu.
03/14/2012 16:32 Flummi1988#5
Quote:
Originally Posted by ©ⓡⓞ©ⓞ View Post
Mit einer For Schleife musst du jetzt jedes gefundene Element des Arrays der ListView übergeben.
GuiCtrlCreateListViewItem ist glaube ich der Befehl dazu.
Da stehe ich jetzt ganz auf dem Schlauch.:confused:
Wie müsste ich dies in meinem falle anstellen ?
03/14/2012 17:55 Njahs#6
Code:
$StringSplit = FileOpen($File)

If isArray($StringSplit)
    For $i = 1 to UBound($StringSplit)
        GuiCtrlSetData($Listbox,$StringSplit[$i])
    Next
Endif
Wenn das nicht funktioniert (Wegen listview) dann probier das hier:

Code:
Global $Variable 
$StringSplit = FileOpen($File)

If isArray($StringSplit)
    For $i = 1 to UBound($StringSplit)
        GuiCtrlCreateListViewItem($StringSplit[$i],$ListView)
    Next
Endif
[Only registered and activated users can see links. Click Here To Register...]
03/14/2012 19:32 Lawliet#7
Quote:
Originally Posted by Njahs View Post
Code:
$StringSplit = FileOpen($File)

If isArray($StringSplit)
    For $i = 1 to UBound($StringSplit)
        GuiCtrlSetData($Listbox,$StringSplit[$i])
    Next
Endif
Wenn das nicht funktioniert (Wegen listview) dann probier das hier:

Code:
Global $Variable 
$StringSplit = FileOpen($File)

If isArray($StringSplit)
    For $i = 1 to UBound($StringSplit)
        GuiCtrlCreateListViewItem($StringSplit[$i],$ListView)
    Next
Endif
[Only registered and activated users can see links. Click Here To Register...]
Das erste Feld von dem Array enthält die Anzahl der Strings ;) Also einfach eine For schleife mit $i = 1 to Array[0]
For $iArray = 1 to Array[0] Step 1
GuiCtrlCreateListViewItem($Array[$i],$ListView)
Next
03/14/2012 20:15 lolkop#8
nur das FileOpen ohnehin kein array ausgiebt? o0
03/14/2012 20:25 Njahs#9
Quote:
Originally Posted by lolkop View Post
nur das FileOpen ohnehin kein array ausgiebt? o0
Ah, mist! fail...
mein's so:


Code:
$StringSplit = StringSplit(FileRead($File),',')

If isArray($StringSplit)
    For $i = 1 to UBound($StringSplit)
        GuiCtrlSetData($Listbox,$StringSplit[$i])
    Next
Endif
Wenn das nicht funktioniert (Wegen listview) dann probier das hier:

Code:
Global $Variable 
$StringSplit = StringSplit(FileRead($File),',')

If isArray($StringSplit)
    For $i = 1 to UBound($StringSplit)
        GuiCtrlCreateListViewItem($StringSplit[$i],$ListView)
    Next
Endif
03/14/2012 20:35 jacky919#10
FileOpen gibt auch nicht den Text zurück, sondern ein Handle der Datei.
03/29/2012 09:42 Flummi1988#11
Ich habe jetzt länger dran versucht herumzuwerkeln

aber setze ich das ganze in die case $listview
oder wohin muss die for schleife ?

Weil ich würde es theoretisch so machen funzt nur net.

#include <GUIConstants.au3>

#NoTrayIcon
$Form1 = GUICreate("Barcodelister", 759, 606, 201, 55)
$ListView1 = GUICtrlCreateListView("Barcode|EAN|Zeit|Datum|Gesc häft|Ware|Kategorie|Stück|Einzelpreis", 8, 224, 746, 342)
GUICtrlSendMsg(-1, 0x101E, 0, 100)
GUICtrlSendMsg(-1, 0x101E, 1, 50)
GUICtrlSendMsg(-1, 0x101E, 2, 60)
GUICtrlSendMsg(-1, 0x101E, 3, 60)
GUICtrlSendMsg(-1, 0x101E, 4, 150)
GUICtrlSendMsg(-1, 0x101E, 5, 120)
GUICtrlSendMsg(-1, 0x101E, 6, 80)
GUICtrlSendMsg(-1, 0x101E, 7, 50)
GUICtrlSendMsg(-1, 0x101E, 8, 70)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Case $ListView1
$file = FileOpen("liste.txt", 0)
$data = StringSplit(FileReadLine($file), ",")
Global $Variable
$StringSplit = StringSplit(FileRead($File),',')

If isArray($StringSplit)
For $i = 1 to UBound($StringSplit)
GuiCtrlCreateListViewItem($StringSplit[$i],$ListView)
Next
Endif
FileClose($file)
Exit
EndSwitch
WEnd

stehe da wo ich am 14.03. auch stand

Erschlagt mich bitte ........ ;-)
03/29/2012 10:48 lolkop#12
Quote:
Originally Posted by Flummi1988 View Post
#include <GUIConstants.au3>

#NoTrayIcon
$Form1 = GUICreate("Barcodelister", 759, 606, 201, 55)
$ListView1 = GUICtrlCreateListView("Barcode|EAN|Zeit|Datum|Gesc häft|Ware|Kategorie|Stück|Einzelpreis", 8, 224, 746, 342)
GUICtrlSendMsg(-1, 0x101E, 0, 100)
GUICtrlSendMsg(-1, 0x101E, 1, 50)
GUICtrlSendMsg(-1, 0x101E, 2, 60)
GUICtrlSendMsg(-1, 0x101E, 3, 60)
GUICtrlSendMsg(-1, 0x101E, 4, 150)
GUICtrlSendMsg(-1, 0x101E, 5, 120)
GUICtrlSendMsg(-1, 0x101E, 6, 80)
GUICtrlSendMsg(-1, 0x101E, 7, 50)
GUICtrlSendMsg(-1, 0x101E, 8, 70)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Case $ListView1
$file = FileOpen("liste.txt", 0)
$data = StringSplit(FileReadLine($file), ",")
Global $Variable
$StringSplit = StringSplit(FileRead($File),',')

If isArray($StringSplit) <--- If ohne Then?
For $i = 1 to UBound($StringSplit)
GuiCtrlCreateListViewItem($StringSplit[$i],$ListView) <--- $ListView?
Next
Endif
FileClose($file)
Exit
EndSwitch
WEnd
es reicht in der regel auch einfach mal in scite zu schauen, was du für syntaxfehler eingebaut hast... sobald du F5 drückst, zeigt dir der debugger sofort alle fehler an.
03/29/2012 17:39 Flummi1988#13
Also ich habe es jetzt so abgeändert. Das Programm selber Startet auch,
aber wieso kommt die listview ausgabe nicht zustande ?

hinterlege hier nun mal die Textdatei und das script

-liste.txt-
9876543,21,0:00,01.01.01,xyz,xyz,test,5,15

-Listview.au3-

#include <GUIConstants.au3>

#NoTrayIcon
$Form1 = GUICreate("Barcodelister", 759, 606, 201, 55)
$ListView1 = GUICtrlCreateListView("Barcode|EAN|Zeit|Datum|Gesc häft|Ware|Kategorie|Stück|Einzelpreis", 8, 224, 746, 342)
GUICtrlSendMsg(-1, 0x101E, 0, 100)
GUICtrlSendMsg(-1, 0x101E, 1, 50)
GUICtrlSendMsg(-1, 0x101E, 2, 60)
GUICtrlSendMsg(-1, 0x101E, 3, 60)
GUICtrlSendMsg(-1, 0x101E, 4, 150)
GUICtrlSendMsg(-1, 0x101E, 5, 120)
GUICtrlSendMsg(-1, 0x101E, 6, 80)
GUICtrlSendMsg(-1, 0x101E, 7, 50)
GUICtrlSendMsg(-1, 0x101E, 8, 70)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $ListView1
$file = FileOpen("liste.txt", 0)
Global $Variable
$StringSplit = StringSplit(FileRead($File),',')

If Then isArray($StringSplit)
For $i = 1 to UBound($StringSplit)
GuiCtrlCreateListViewItem($StringSplit[$i],$ListView1)
Next
FileClose($file)
Exit
EndSwitch
WEnd

Ich habe mir jetzt auch schon mehrfach das iniread und listview verfahren angeschaut aber dahinter komme ich nicht.:(:confused:
03/29/2012 18:37 lolkop#14
lies dir docheinmal bitte die autoit grundlagen durch.

kleiner tipp am rande, denk mal darüber nach, was dein script da macht.
If (zu deutsch "wenn"), und Then (zu deutsch "dann"), direkt nacheinander nutzen macht natürlich niemals sinn...

ein einfaches grundwissen über grammatik sollte reichen, um einzusehen, das ein satz so aufgebaut wird:
Code:
Wenn <dieser Ausdruck gilt> Dann <passiert das folgende>
und nicht etwa so:
Code:
Wenn Dann <dieser Ausdruck gilt> <passiert das folgende>
03/30/2012 02:01 aj1987#15
Auch wenn du darauss nun nix lernst...
hier die lösung:

Code:
#include <GUIConstants.au3>
#include <File.au3>

Global $file = "test.txt"
Global $zeilen = _FileCountLines($file)
Global $dump
Global $file_string[$zeilen]

#NoTrayIcon
$Form1 = GUICreate("Barcodelister", 759, 606, 201, 55)
$ListView1 = GUICtrlCreateListView("Barcode|EAN|Zeit|Datum|Geschäft|Ware|Kategorie|Stück|Einzelpreis", 8, 224, 746, 342)
GUICtrlSendMsg(-1, 0x101E, 0, 100)
GUICtrlSendMsg(-1, 0x101E, 1, 50)
GUICtrlSendMsg(-1, 0x101E, 2, 60)
GUICtrlSendMsg(-1, 0x101E, 3, 60)
GUICtrlSendMsg(-1, 0x101E, 4, 150)
GUICtrlSendMsg(-1, 0x101E, 5, 120)
GUICtrlSendMsg(-1, 0x101E, 6, 80)
GUICtrlSendMsg(-1, 0x101E, 7, 50)
GUICtrlSendMsg(-1, 0x101E, 8, 70)

For $i = 1 To $zeilen
	$file_string[$i - 1] = FileReadLine($file, $i)
	$dump = StringReplace($file_string[$i - 1], ",", "|")
	GUICtrlCreateListViewItem($dump, $ListView1)
Next

GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
Bedank dich wenn ich dir geholfen hab...