Hallo,
ich möchte eine Txt-Datei(große Datei) auslesen, die z.B. so aussieht:
ticket;symbol;typ;magicnumber;netto;day;month;comment
1234591;EURUSD;SHORT;12381;1,00;Sonntag;Oktober;EA V.1
1234592;EURUSD;LONG;12380;0,70;Sonntag;Oktober;EA V.1
1234593;EURUSD;SHORT;12382;-0,10;Sonntag;Oktober;EA V.1
1234594;EURUSD;SHORT;12382;0,70;Montag;Oktober;EA V.1
1234595;EURUSD;SHORT;12383;0,80;Montag;Oktober;EA V.1
und soll dann z.B. so in einem Gui angezeigt werden:
Jetzt weiß gar nicht so recht, wie ich anfangen soll. Auf Grund der Größe der Datei, weiß ich, wird "Loop, read, C:\Test.txt" empfohlen. Doch wie mache ich das, dass ich nach dem Speichern in die Variablen mir Wörter der Zeilen raussuche, wo das Programm dann auch noch weiß, dass die "Magicnumber" und das "Comment" in einer Zeile sind und somit zusammengehören?
Entspannte Grüße
Fresh Janine
Txt-Datei auslesen und Teile davon im Gui anzeigen
Moderator: jNizM
-
- Posts: 29
- Joined: 07 May 2017, 10:15
Re: Txt-Datei auslesen und Teile davon im Gui anzeigen
Moin,
Dein Dateibeispiel sieht aus wie eine CSV-Datei, die sich über den Feldtrenner ; einfach aufteilen lässt. Das Bild des Fensters legt nahe, ein ListView für die Darstellung zu verwenden. Dabei gibt es möglicherweise Probleme.
Edit: In Deinem Beispiel gibt es die Magicnumber 12382 doppelt. Ist das normal und soll das irgendwie besonders behandelt werden?
Dein Dateibeispiel sieht aus wie eine CSV-Datei, die sich über den Feldtrenner ; einfach aufteilen lässt. Das Bild des Fensters legt nahe, ein ListView für die Darstellung zu verwenden. Dabei gibt es möglicherweise Probleme.
- ListViews zeigen pro Spalte nur die ersten 260 Zeichen des Spaltentextes an. Wenn die aneinandergeketteten Magicnumbers länger werden, wird die Anzeige abgeschnitten.
- Wenn Du für jede Magicnumber eine eigene Spalte anlegen willst, bekommst Du ein Problem, wenn die Gesamtzahl der Spalten 200 überschreitet. Das ist laut Hilfedatei die maximale Spaltenzahl.
Edit: In Deinem Beispiel gibt es die Magicnumber 12382 doppelt. Ist das normal und soll das irgendwie besonders behandelt werden?
-
- Posts: 29
- Joined: 07 May 2017, 10:15
Re: Txt-Datei auslesen und Teile davon im Gui anzeigen
Also erstmal, dieses Programm: "https://autohotkey.com/board/topic/3730 ... en-in-ahk/" nutzt auch Listview. Ich hatte es gerade ausprobiert und es gibt da keine maximale Spaltenzahl. Und die 260 Zeichen würden locker für die Magicnumbers ausreichen.
Du hast recht, es könnte auch eine Csv-Datei sein. Ich könnte meine Liste auch als Csv-Datei abspeichern lassen, doch ich hab mich für eine Txt-Datei entschieden, da ich es als etwas einfacher empfinde, darauf ein Ahk-Programm basieren zu lassen.
Das häufig die selbe Magicnumber auftaucht ist vollkommen normal und soll auch so sein. Und in der Tabelle soll keine Magicnumber doppelt angezeigt werden.
Diese Tabelle ist eigentlich nur der Anfang eines nützliches Tools. Es soll am Ende eigentlich so aussehen: Im ersten Tab ist die untere Liste nur eine Anzeige zur Übersicht und in der oberen Tabelle speichert man seine EAs (Expert Advisor) mit den dazugehörigen Magicnumbers ein, was sehr wichtig ist, denn wenn man dann in der oberen Tabelle auf eine Zeile doppelklickt, soll automatisch Tab 2 fokussiert werden und man soll nur das Ergebnis dieser selbst eingetragenen Magicnumbers sehen. Genau so wie, wenn man dann in Tab 2 in der linken Tabelle auf eine Zeile doppelklickt, dann soll Tab 3 fokussiert werden und man sieht nur das Ergebnis von diesen Tag mit diesen Magicnumbers.
Ich fürchte, dieses Tool übersteigt zu sehr meine Kompetenz. Was würde es mich kosten, das von jemanden programmieren zu lassen?
Du hast recht, es könnte auch eine Csv-Datei sein. Ich könnte meine Liste auch als Csv-Datei abspeichern lassen, doch ich hab mich für eine Txt-Datei entschieden, da ich es als etwas einfacher empfinde, darauf ein Ahk-Programm basieren zu lassen.
Das häufig die selbe Magicnumber auftaucht ist vollkommen normal und soll auch so sein. Und in der Tabelle soll keine Magicnumber doppelt angezeigt werden.
Diese Tabelle ist eigentlich nur der Anfang eines nützliches Tools. Es soll am Ende eigentlich so aussehen: Im ersten Tab ist die untere Liste nur eine Anzeige zur Übersicht und in der oberen Tabelle speichert man seine EAs (Expert Advisor) mit den dazugehörigen Magicnumbers ein, was sehr wichtig ist, denn wenn man dann in der oberen Tabelle auf eine Zeile doppelklickt, soll automatisch Tab 2 fokussiert werden und man soll nur das Ergebnis dieser selbst eingetragenen Magicnumbers sehen. Genau so wie, wenn man dann in Tab 2 in der linken Tabelle auf eine Zeile doppelklickt, dann soll Tab 3 fokussiert werden und man sieht nur das Ergebnis von diesen Tag mit diesen Magicnumbers.
Ich fürchte, dieses Tool übersteigt zu sehr meine Kompetenz. Was würde es mich kosten, das von jemanden programmieren zu lassen?
Re: Txt-Datei auslesen und Teile davon im Gui anzeigen
OK, den Begriff 'Expert Advisor' habe ich schon mal gehört. Es geht hier um ein Börsenprogramm, oder?
Die Begrenzung auf 200 Spalten gilt zumindest für die Funktion LV_InsertCol(). Das ListView Control nimmt aber beim Erstellen deutlich mehr Spalten an.
Wenn Du glaubst, dass 260 Zeichen ausreichen, um alle Magicnumbers darzustellen, sollten auch 200 Spalten locker reichen. Du hast ja vor, per Doppelklick im ersten ListView die Magicnumbers auszuwerten. Wenn Du immer alle auswerten willst, geht das in einer Spalte. Wenn Du sie allerdings einzeln auswerten willst, solltest Du jeder Nummer eine eigene Spalte gönnen.
Zum Thema 'doppelte Magicnumbers' hast Du Dich nicht geäußert.
AHK ist die Dateiendung egal, solange der interne Aufbau stimmt. Die eingebauten CSV-Funktionen unterstützen aber nur das Komma als Feldtrenner. Die braucht man aber nicht, wenn sichergestellt ist, dass das Trennzeichen (hier Semikolon) nie innerhalb der Felder vorkommt.
Ansonsten habe ich nichts gehört oder gesehen, was nicht machbar wäre. Und, falls Du DIch dafür entscheidest, es gegen Bezahlung in AHK programmieren zu lassen, es ist bisher auch nichts dabei, das für einen 'Experten' mit echter Arbeit verbunden wäre. Man mag sich allerdings fragen, wie 'wertvoll' das Ergebnis für Dich ist.
Die Begrenzung auf 200 Spalten gilt zumindest für die Funktion LV_InsertCol(). Das ListView Control nimmt aber beim Erstellen deutlich mehr Spalten an.
Wenn Du glaubst, dass 260 Zeichen ausreichen, um alle Magicnumbers darzustellen, sollten auch 200 Spalten locker reichen. Du hast ja vor, per Doppelklick im ersten ListView die Magicnumbers auszuwerten. Wenn Du immer alle auswerten willst, geht das in einer Spalte. Wenn Du sie allerdings einzeln auswerten willst, solltest Du jeder Nummer eine eigene Spalte gönnen.
Zum Thema 'doppelte Magicnumbers' hast Du Dich nicht geäußert.
AHK ist die Dateiendung egal, solange der interne Aufbau stimmt. Die eingebauten CSV-Funktionen unterstützen aber nur das Komma als Feldtrenner. Die braucht man aber nicht, wenn sichergestellt ist, dass das Trennzeichen (hier Semikolon) nie innerhalb der Felder vorkommt.
Ansonsten habe ich nichts gehört oder gesehen, was nicht machbar wäre. Und, falls Du DIch dafür entscheidest, es gegen Bezahlung in AHK programmieren zu lassen, es ist bisher auch nichts dabei, das für einen 'Experten' mit echter Arbeit verbunden wäre. Man mag sich allerdings fragen, wie 'wertvoll' das Ergebnis für Dich ist.
-
- Posts: 29
- Joined: 07 May 2017, 10:15
Re: Txt-Datei auslesen und Teile davon im Gui anzeigen
In der 5. Zeile hatte ich doch zum Thema 'doppelte Magicnumbers" Stellung genommen, Zitat: "Das häufig die selbe Magicnumber auftaucht ist vollkommen normal und soll auch so sein. Und in der Tabelle soll keine Magicnumber doppelt angezeigt werden.".
Ja, es ist soll ein Tool für ein Börsenprogramm werden.
Du hast mir soweit schon gut geholfen, danke dir
Doch ich habe vorhin tatsächlich schon beschlossen, dass ich es von einem Experten programmieren lassen werde. Kennst du jemanden, der gegen Bezahlung, deutsch spricht und mit Leichtigkeit mein Analyse-Tool programmieren könnte?
Ja, es ist soll ein Tool für ein Börsenprogramm werden.
Du hast mir soweit schon gut geholfen, danke dir
Doch ich habe vorhin tatsächlich schon beschlossen, dass ich es von einem Experten programmieren lassen werde. Kennst du jemanden, der gegen Bezahlung, deutsch spricht und mit Leichtigkeit mein Analyse-Tool programmieren könnte?
Re: Txt-Datei auslesen und Teile davon im Gui anzeigen
ähnliches Beispiel mit 2 Listbox und 1 Listview
z.B. News > Zürich > Info/start url
z.B. News > Zürich > Info/start url
Code: Select all
#warn
#NoEnv
setworkingdir,%a_scriptdir%
Filename1=Listbox_Listview_MENU
cx1:=""
cx2:=""
e1:=""
e2:=""
f1=%a_scriptdir%\AllAdressCSV.txt
gosub,createtestfile
Gui,1:default
Gui,1: Color, ControlColor,Black
Gui,1: Color, Black
Gui,1:Font,S12 cGray,Lucida Console
Gui,1:Add, ListView,backgroundteal csilver grid r10 x220 y0 w480 +hscroll altsubmit gLW1 vMLV1, Name|URL1
LV_ModifyCol(1,220)
LV_ModifyCol(2,220)
; LV_ModifyCol()
Gui,1:Show,x0 y0 w710 h260,%filename1%
Gui,1:add,Listbox,x5 y10 w100 h200 Sort vLB1 gLB1
Gui,1:add,Listbox,x110 y10 w100 h200 Sort vLB2 gLB2
gosub,Fileread1
return
Guiclose:
exitapp
Fileread1:
GuiControl,1:,LB1,|
fileread,aa,%f1%
loop,parse,aa,`n,`r
{
x:=a_loopfield
if x=
continue
stringsplit,C,x,`;,
if cx1<>%c1%
e1 .= C1 . "|"
cx1=%c1%
}
GuiControl,1:,LB1,%e1%
GuiControl, ChooseString, LB1, News-ch
aa=
e1=
return
LB1:
Gui,1:submit,nohide
Gui,1:ListView,mlv1
LV_Delete()
GuiControl,1:,LB2,|
fileread,aa,%f1%
loop,parse,aa,`n,`r
{
x:=a_loopfield
if x=
continue
stringsplit,C,x,`;,
if c1=%Lb1%
{
if cx2<>%c2%
e2 .= C2 . "|"
cx2=%c2%
}
}
GuiControl,1:,LB2,%e2%
aa=
e2=
return
LB2:
Gui,1:submit,nohide
Gui,1:ListView,mlv1
LV_Delete()
fileread,aa,%f1%
loop,parse,aa,`n,`r
{
x:=a_loopfield
if x=
continue
c3=
c4=
stringsplit,C,x,`;,
if c2=%Lb2%
LV_Add("",c3,c4)
}
aa=
return
LW1:
Gui, Submit,nohide
if A_GuiEvent = Normal
{
LV_GetText(C1,A_EventInfo,1)
LV_GetText(C2,A_EventInfo,2)
RN:=LV_GetNext("C")
RF:=LV_GetNext("F")
GC:=LV_GetCount()
;msgbox,C1=%c1%`nC2=%c2%
run,%c2%
}
return
;---------------------------------------------------------------
createtestfile:
ifnotexist,%f1%
{
d=
(
News-ch;Baz;Front;https://bazonline.ch/rss_ticker.html
News-ch;Baz;basel;https://bazonline.ch/basel/rss.html
News-ch;Tagesanzeiger;Zuerich;https://www.tagesanzeiger.ch/zuerich/rss.html
News-ru;Sputnik;;https://de.sputniknews.com/
Mathe;us-Archives;math.utk.edu;http://archives.math.utk.edu/popmath.html
News-uk;theRegister;SciTech;http://www.theregister.co.uk/
News-de;zdnet;SciTech;http://www.zdnet.de/
TV-de;TV24;Mediathek;https://www.welt.de/mediathek/
News-de;Karlsruhe;BW;http://www.ka-news.de/nachrichten/baden-wuerttemberg/
News-us;cnet;SciTech;https://www.cnet.com/
Satire-de;Titanic;Cartoon;http://www.titanic-magazin.de/sc.rss
Countries;BBC;CountryProfiles;http://news.bbc.co.uk/2/hi/europe/country_profiles/
Satire-de;Postillon;;http://www.der-postillon.com/
Satire-de;Harmbengen;;http://www.harmbengen.de/Zeitungscartoons.html
)
sort,d
fileappend,%d%,%f1%
d=
}
return
;================================ END script ==================
Re: Txt-Datei auslesen und Teile davon im Gui anzeigen
Das sagt uns aber noch nicht wie genau deoppelte Magicnumbers behandelt werden sollen - was soll passieren wenn eine doppelte Nummer auftaucht? Soll die zweite ignoriert werden, soll die erste ersetzt werden oder sollen etwa beide verrechnet werden?Fresh Janine wrote:"Das häufig die selbe Magicnumber auftaucht ist vollkommen normal und soll auch so sein. Und in der Tabelle soll keine Magicnumber doppelt angezeigt werden."
Recommends AHK Studio
-
- Posts: 29
- Joined: 07 May 2017, 10:15
Re: Txt-Datei auslesen und Teile davon im Gui anzeigen
Wenn das Tool noch mal die gleiche Magicnumber findet, was sehr häufig der Fall sein wird, dann soll er diese ignorieren.
Jetzt sind schon 3 Experten hier. Vielleicht hat einer von euch Lust gegen Geld mir das Analyse-Tool zu programmieren?
Ich werde dann natürlich auch alles ausführlich erklären.
Jetzt sind schon 3 Experten hier. Vielleicht hat einer von euch Lust gegen Geld mir das Analyse-Tool zu programmieren?
Ich werde dann natürlich auch alles ausführlich erklären.
Re: Txt-Datei auslesen und Teile davon im Gui anzeigen
Nun ja, die 5. Zeile habe ich wohl nicht wahrgenommen.
Zum Thema Auftragsprogrammierung:
Wie ich die Diskussion im englischen Forum verstanden habe, ist das nicht unbedingt gern gesehen, aber auch nicht verboten. Allerdings sind die "Ich brauche Hilfe" Foren dafür tabu. In diesen Foren wird immer ohne eine vorher vereinbarte finanzielle Gegenleistung geholfen. Du solltest deshalb einen neuen Thread in "Allgemeines" aufmachen.
Auch dort sind öffentliche Verhandlungen über das Entgelt eigentlich tabu. In jedem Fall solltest Du DIr Gedanken über eine konkrete Anforderungsliste (Pflichtenheft) machen, die so formuliert ist, dass 'Missverständnisse' ausgeschlossen sind. Wenn Dir das nicht gelingt, kommt es mit großer Wahrscheinlichkeit zu Diskussionen darüber, ob das gelieferte Produkt die Anforderungen erfüllt.
Zum Thema Auftragsprogrammierung:
Wie ich die Diskussion im englischen Forum verstanden habe, ist das nicht unbedingt gern gesehen, aber auch nicht verboten. Allerdings sind die "Ich brauche Hilfe" Foren dafür tabu. In diesen Foren wird immer ohne eine vorher vereinbarte finanzielle Gegenleistung geholfen. Du solltest deshalb einen neuen Thread in "Allgemeines" aufmachen.
Auch dort sind öffentliche Verhandlungen über das Entgelt eigentlich tabu. In jedem Fall solltest Du DIr Gedanken über eine konkrete Anforderungsliste (Pflichtenheft) machen, die so formuliert ist, dass 'Missverständnisse' ausgeschlossen sind. Wenn Dir das nicht gelingt, kommt es mit großer Wahrscheinlichkeit zu Diskussionen darüber, ob das gelieferte Produkt die Anforderungen erfüllt.
Re: Txt-Datei auslesen und Teile davon im Gui anzeigen
Moin,
Du hast ja anscheinend noch keine endgültige Entscheidung über die 'Auftragsarbeit' getroffen. Damit Du das etwas besser beurteilen kannst, habe ich mal mit Beispieldaten das untere ListView Control im ersten Tab gefüllt, wie ich es verstanden habe:
Du hast ja anscheinend noch keine endgültige Entscheidung über die 'Auftragsarbeit' getroffen. Damit Du das etwas besser beurteilen kannst, habe ich mal mit Beispieldaten das untere ListView Control im ersten Tab gefüllt, wie ich es verstanden habe:
Code: Select all
#NoEnv
#SingleInstance Force
SetWorkingDir %A_ScriptDir%
AnalyseDatei := A_ScriptDir . "\ZumTesten.txt"
; --------------------------------------------------------------------------------------------------------------------------------
If !FileExist(AnalyseDatei)
CreateTestFile(AnalyseDatei)
; --------------------------------------------------------------------------------------------------------------------------------
Menu Tray, Icon, shell32.dll, 50
; --------------------------------------------------------------------------------------------------------------------------------
Gui Font, s10, Verdana
Gui Add, Tab3, x0 y0 w1000 h510 +Buttons +0x8 +AltSubmit, Hauptmenu|Expert Advisor|Detail
Gui Tab, 1
Gui Add, ListView, x100 y45 w800 h200 vLV1, Expert Advisor |Magicnumber
Gui Add, DropDownList, x100 y255 w305, MT4-1||MT4-2||MT4-3||MT4-4||MT4-5||MT4-6||MT4-7||MT4-8
Gui Add, Button, x415 y254 w100 h23, &Edit
Gui Add, Button, x520 y254 w100 h23, &Save
Gui Add, Button, x625 y254 w100 h23, &New
Gui Add, ListView, x100 y290 w800 h195 vLV2, Kommentar |Magicnumber
GoSub, FillLV2
Gui Tab, 2
Gui Add, ListView, x40 y35 w400 h460, Datum |Tag |Gewinn
Gui Add, ListView, x460 y35 w300 h460, Jahr |Monat |Gewinn
Gui Add, Button, x780 y60 w150 h23, &Komplette Historie
Gui Add, DropDownList, x780 y100 w150, EURUSD||GBPUSD||AUDUSD
Gui Tab, 3
Gui Add, ListView, x0 y20 w1000 h468, Kommentar|Ordernummer|Closetime|Slippage|Typ|Volumen|Symbol|Gewinn
Gui Add, Text, x780 y488 w220 h23 +E0x200, Gesamtsumme:
; --------------------------------------------------------------------------------------------------------------------------------
Gui Show, w1000 h510, Analyse
Return
; --------------------------------------------------------------------------------------------------------------------------------
GuiEscape:
GuiClose:
ExitApp
; --------------------------------------------------------------------------------------------------------------------------------
FillLV2:
Gui, ListView, LV2
LV2_Array := []
LV2_Columns := 2
EA_Index := 8
MN_Index := 4
Loop, Read, %AnalyseDatei%
{
If (A_Index > 1)
{
Split := StrSplit(A_LoopReadLine, ";")
EA := Split[EA_Index]
MN := Split[MN_Index]
If LV2_Array.HasKey(EA)
{
If !InStr(LV2_Array[EA], MN)
LV2_Array[EA] .= ", " . MN
}
Else
LV2_Array[EA] := MN
}
}
For EA, MN In LV2_Array
LV_Add("", EA, MN)
Loop, %LV2_Columns%
LV_ModifyCol(A_Index, "AutoHdr")
Return
; ================================================================================================================================
; Zum Testen
; ================================================================================================================================
CreateTestFile(FileName) {
Inhalt := "
(LTrim Join`r`n
ticket;symbol;typ;magicnumber;netto;day;month;comment
1234591;EURUSD;SHORT;12381;1,00;Sonntag;Oktober;EA V.1
1234592;EURUSD;LONG;12380;0,70;Sonntag;Oktober;EA V.1
1234593;EURUSD;SHORT;12382;-0,10;Sonntag;Oktober;EA V.1
1234594;EURUSD;SHORT;12382;0,70;Montag;Oktober;EA V.1
1234595;EURUSD;SHORT;12383;0,80;Montag;Oktober;EA V.1
1234596;EURUSD;SHORT;666;1,00;Sonntag;Oktober;EA V.2
1234597;EURUSD;LONG;667;0,70;Sonntag;Oktober;EA V.2
1234598;EURUSD;SHORT;99000;-0,10;Sonntag;Oktober;EA V.3
1234599;EURUSD;SHORT;99000;0,70;Montag;Oktober;EA V.3
1234600;EURUSD;SHORT;77000;0,80;Montag;Oktober;EA V.4
)"
FileOpen(FileName, "w").Write(Inhalt)
VarSetCapacity(Content, 0)
}
-
- Posts: 29
- Joined: 07 May 2017, 10:15
Re: Txt-Datei auslesen und Teile davon im Gui anzeigen
Ich wusste doch, dass euch das Spaß macht. Besonders dir just me, danke dir! Hab mich über dein Code sehr gefreut! Mir macht AHK ja auch Spaß, nur diesmal ist das Level für mich ein wenig zu hoch. Ich wollte noch, dass die Magicnumbers numerisch sortiert sind, doch wohin mit dem Befehl: "Sort MN, N D,"? Und das man die Liste editieren kann, nicht um drin rum zu schreiben, sondern einfach nur das man mehrere Magicnumbers markieren kann. Die Dropdownliste mit MT4 soll dann dafür da sein, dass man zwischen verschiedenen Listen wechseln kann. Und ich mach mir ja schon fest entschlossen Gedanken über die konkrete Anforderungsliste, doch nebenbei versuch ich auch so weit zu kommen, wie es geht
Re: Txt-Datei auslesen und Teile davon im Gui anzeigen
Ich geh mal davon aus, dass Du das Skript nur selbst nutzen willst, sodass es reicht, wenn die gewünschten Funktionen überhaupt irgendwie umgesetzt werden.
Wenn Du in einem ListView editieren willst, besteht die einfachste Lösung darin, die zu editierenden Daten in die erste Spalte zu schreiben. Dann geht das mit -ReadOnly.
Über die Sortierung bin ich auch schon gestolpert. Folgende Änderung sollte helfen, stellt die EA aber noch in die erste Spalte:
Wenn Du in einem ListView editieren willst, besteht die einfachste Lösung darin, die zu editierenden Daten in die erste Spalte zu schreiben. Dann geht das mit -ReadOnly.
Über die Sortierung bin ich auch schon gestolpert. Folgende Änderung sollte helfen, stellt die EA aber noch in die erste Spalte:
Code: Select all
Loop, Read, %AnalyseDatei%
{
If (A_Index > 1)
{
Split := StrSplit(A_LoopReadLine, ";")
EA := Split[EA_Index]
MN := Split[MN_Index]
If LV2_Array.HasKey(EA)
LV2_Array[EA] .= " " . MN
Else
LV2_Array[EA] := MN
}
}
For EA, MN In LV2_Array
{
Sort, MN, D%A_Space% N U
LV_Add("", EA, MN)
}
-
- Posts: 29
- Joined: 07 May 2017, 10:15
Re: Txt-Datei auslesen und Teile davon im Gui anzeigen
Ja, das Programm ist nur für mich und deine Sortierung funktioniert hervorragend!
Ich hab mir für das markieren des Textes eine andere praktische Lösung überlegt und bin auch kurz vor dem Ziel, doch es klappt nicht ganz. Vielleicht weißt du, just me, voran es liegt, schau: Die Datei Test.txt entspricht nun der orginalen Liste. Ich hab nur die Kommentare und die Magicnumbers ein wenig verändert.
Das richtige Verwenden von A_EventInfo brauch ich ja dann auch für die Tabelle darüber, wo nach einem Klick dann der 2. Tab fokussiert wird und die 2 Tabellen füllen sich dann anhand der Information, was im 1. Tab in der oberen Tabelle angeklickt wurde.
Ich hab mir für das markieren des Textes eine andere praktische Lösung überlegt und bin auch kurz vor dem Ziel, doch es klappt nicht ganz. Vielleicht weißt du, just me, voran es liegt, schau: Die Datei Test.txt entspricht nun der orginalen Liste. Ich hab nur die Kommentare und die Magicnumbers ein wenig verändert.
Das richtige Verwenden von A_EventInfo brauch ich ja dann auch für die Tabelle darüber, wo nach einem Klick dann der 2. Tab fokussiert wird und die 2 Tabellen füllen sich dann anhand der Information, was im 1. Tab in der oberen Tabelle angeklickt wurde.
Re: Txt-Datei auslesen und Teile davon im Gui anzeigen
AHK geht mit ListViews recht merkwürdig um. Die LV_...() Funktionen beziehen sich immer auf das Standard-ListView des aktuellen Standard-GUIs. Und das ist standardmäßig das zuletzt vor Aufruf der Funktion erstellte ListView. Selbst in dem einem ListView zugeordneten g-label wird das auslösende ListView nicht als Standard gesetzt, sein GUI dagegen schon.
Code: Select all
Copie:
Gui, ListView, LV2 ; LV2 zum Standard-ListView machen
If (A_GuiEvent = "Normal") && (Selected := LV_GetNext()) ; falls in einen leeren Bereich des ListViews geklickt wurde, nichts tun
{
LV_GetText(MN, Selected, 2) ; Du willst ja den Inhalt der 2. Spalte
Gui, Copie: New ; wir geben dem GUI einen Namen und machen es per New zum Standard-GUI
Gui, Add, Edit, x0 y0 h80 w600 vCopieED, %MN%
Gui, Show, h80 w600, Copie
}
; Guicontrol, Focus, CopieED ; überflüssig
Return
CopieGuiclose:
Gui, Destroy
Return
-
- Posts: 29
- Joined: 07 May 2017, 10:15
Re: Txt-Datei auslesen und Teile davon im Gui anzeigen
Hallo,
danke just me. Du hast mir da wirklich sehr geholfen! Ich hab dadurch fleißig weiter getüfftelt. Ich hab schon oft deinen Namen gesehen und wie du geduldig den Menschen weitergeholfen hast. Chapeau! An der Stelle.
Und jetzt weiß ich wieder absolut nicht weiter. Ich hab alles schön programmiert, doch wie ich am Ende, nach dem ich den Eintrag editiert habe oder einen neuen Eintrag schreibe, speichere, versteh ich nicht. Löschen geht auch nicht, doch wenn dann das andere geht, könnte es sein, das sich das von selbst erklärt.
Weiß jemand eventuell weiter?
danke just me. Du hast mir da wirklich sehr geholfen! Ich hab dadurch fleißig weiter getüfftelt. Ich hab schon oft deinen Namen gesehen und wie du geduldig den Menschen weitergeholfen hast. Chapeau! An der Stelle.
Und jetzt weiß ich wieder absolut nicht weiter. Ich hab alles schön programmiert, doch wie ich am Ende, nach dem ich den Eintrag editiert habe oder einen neuen Eintrag schreibe, speichere, versteh ich nicht. Löschen geht auch nicht, doch wenn dann das andere geht, könnte es sein, das sich das von selbst erklärt.
Weiß jemand eventuell weiter?
Re: Txt-Datei auslesen und Teile davon im Gui anzeigen
Moin,
ich sehe, das Skript ist gewachsen. Ich will allerdings nicht raten, was die neuen Routinen tatsächlich machen sollen. Würdest Du das bitte genau beschreiben?
Ein paar Anmerkungen vorab:Für mich sieht das so aus, als ob das ListView aus einer von mehreren INI-Dateien gefüllt wird, die über das DDL ausgewählt werden können. Du solltest dabei nicht immer wieder ein neues ListView erstellen. Das würde auch zu Fehlern führen, wenn der Name LV1 ein weiteres Mal genutzt werden soll. Stelle das Gui, Add, ListView, ... deshalb wieder nach oben.
Die Listeneinträge werden nur durch ein Pipe-Zeichen | getrennt. Nur wenn ein Eintrag ausgewählt werden soll, in diesem Fall wohl MT4-1, folgen ihm zwei Pipes.
Verwende die Block-Klammern { ... } nur dann, wenn sie gebraucht werden. Anderenfalls kann AHK manchmal merkwürdig reagieren, wenn man den an sich funktionierenden Code noch einmal ändert.
ich sehe, das Skript ist gewachsen. Ich will allerdings nicht raten, was die neuen Routinen tatsächlich machen sollen. Würdest Du das bitte genau beschreiben?
Ein paar Anmerkungen vorab:
Code: Select all
FillLV1:
Code: Select all
Gui Add, DropDownList, x100 y255 w305, MT4-1||MT4-2||MT4-3||MT4-4||MT4-5||MT4-6||MT4-7||MT4-8
Code: Select all
New:
Gui, ListView, LV1
{
Gui New: New
Gui Font, s10, Verdana
Gui Add, Edit, x12 y12 h25 w577 vNew1
Gui Add, Edit, x12 y50 h80 w577 vNew2
Gui Add, Button, x240 y140 w120 h25 gSave, &Save
Gui Show, h177 w600, New
}
Return
-
- Posts: 29
- Joined: 07 May 2017, 10:15
Re: Txt-Datei auslesen und Teile davon im Gui anzeigen
Ich hab natürlich gleich alle Hinweise umgesetzt und bei der Dropdownliste hab ich gar keine Doppel-Pipe, weil erstmal keine Listen gefüllt werden sollen, doch das erläutere ich jetzt genauer:
Das mit der Dropdownliste im ersten Tab, hat folgenden Grund. Auf mein Server laufen mehrere MT4-Instanzen (Metatrader 4) und jeder MT4 speichert eine eigene Historie-Liste(in unseren Beispiel ist das die Liste.txt). Und auf jeden MT4 laufen unterschiedliche automatische Handelssysteme, die z.B. dann heissen wie "Pipmaker" oder "Mein eigenes System". Ich hab mir eben überlegt, dass wenn ich das Programm starte, dann soll in der Dropdownliste erstmal gar nichts ausgewählt sein und dementsprechend sollen alle Listviews auch leer sein. Erst wenn ich in der Dropdownliste eine MT4-Instanz auswähle, soll von dieser MT4-Instanz die dazugehörige Historie-Liste, für Listview "LV2", und die dazugehörige Ini-Datei, die im oberen Listview(LV1) angezeigt wird, geladen werden. Und davon hab ich auch kein Plan, wie das alles funktionieren soll.
Wenn z.B. in der Dropdownliste MT4-2 ausgewählt ist, dann soll auch nur in der MT4-2.ini gespeichert werden:
Wenn ich im EditGui auf den Save-Button klicke, dann soll die Information in der Ini-Datei überschrieben werden.
Wenn ich im NewGui auf den Save-Button klicke, dann soll die Information unten in der Ini-Datei hinzugefügt und gespeichert werden. Und jedes mal, wenn was gespeichert wurde, möchte ich die Veränderung auch sofort im Listview(LV1) sehen und genau wie mit dem Speichern, weiß ich nicht, was da der richtige Weg ist. Ergo, ich weiß überhaupt nicht mehr weiter.
Später wenn das Script fertig programmiert ist, soll wenn man im oberen Listview(LV1) auf eine Zeile doppelklickt, die 2 Tabellen im zweiten Tab, nur Informationen anhand dieser in der Zeile befindlichen Magicnumbers und natürlich anhand der aktuell ausgewählten MT4-Instanz, sich füllen.
Ich bezahl dich auch gern dafür, doch ich hab das Gefühl, du möchtest lieber für Nachfolgerschaft sorgen und dein Wissen weitergeben, was ja auch ok ist, denn schließlich gilt: Einmal Autohotkey, immer Autohotkey. Ich meine, ich hätte auch das Programm mit Visual C# entwerfen können, doch da nehm ich lieber Autohotkey.
Das mit der Dropdownliste im ersten Tab, hat folgenden Grund. Auf mein Server laufen mehrere MT4-Instanzen (Metatrader 4) und jeder MT4 speichert eine eigene Historie-Liste(in unseren Beispiel ist das die Liste.txt). Und auf jeden MT4 laufen unterschiedliche automatische Handelssysteme, die z.B. dann heissen wie "Pipmaker" oder "Mein eigenes System". Ich hab mir eben überlegt, dass wenn ich das Programm starte, dann soll in der Dropdownliste erstmal gar nichts ausgewählt sein und dementsprechend sollen alle Listviews auch leer sein. Erst wenn ich in der Dropdownliste eine MT4-Instanz auswähle, soll von dieser MT4-Instanz die dazugehörige Historie-Liste, für Listview "LV2", und die dazugehörige Ini-Datei, die im oberen Listview(LV1) angezeigt wird, geladen werden. Und davon hab ich auch kein Plan, wie das alles funktionieren soll.
Wenn z.B. in der Dropdownliste MT4-2 ausgewählt ist, dann soll auch nur in der MT4-2.ini gespeichert werden:
Wenn ich im EditGui auf den Save-Button klicke, dann soll die Information in der Ini-Datei überschrieben werden.
Wenn ich im NewGui auf den Save-Button klicke, dann soll die Information unten in der Ini-Datei hinzugefügt und gespeichert werden. Und jedes mal, wenn was gespeichert wurde, möchte ich die Veränderung auch sofort im Listview(LV1) sehen und genau wie mit dem Speichern, weiß ich nicht, was da der richtige Weg ist. Ergo, ich weiß überhaupt nicht mehr weiter.
Später wenn das Script fertig programmiert ist, soll wenn man im oberen Listview(LV1) auf eine Zeile doppelklickt, die 2 Tabellen im zweiten Tab, nur Informationen anhand dieser in der Zeile befindlichen Magicnumbers und natürlich anhand der aktuell ausgewählten MT4-Instanz, sich füllen.
Ich bezahl dich auch gern dafür, doch ich hab das Gefühl, du möchtest lieber für Nachfolgerschaft sorgen und dein Wissen weitergeben, was ja auch ok ist, denn schließlich gilt: Einmal Autohotkey, immer Autohotkey. Ich meine, ich hätte auch das Programm mit Visual C# entwerfen können, doch da nehm ich lieber Autohotkey.
Re: Txt-Datei auslesen und Teile davon im Gui anzeigen
Dann hast Du es gut. Ich kann nur AHK, etwas VBA und LotusScript und die 'nützliche' Sprache COBOL (ohne OO-Erweiterungen).Fresh Janine wrote:Ich meine, ich hätte auch das Programm mit Visual C# entwerfen können, doch da nehm ich lieber Autohotkey.
Wenn wir hier noch weiter zusammenarbeiten, wäre es schön, wenn Du nach Änderungen Deine jeweils aktuelle Skriptversion einstellst, damit wir nicht aneinander vorbei entwickeln.
Ansonsten werde ich versuchen, das Ganze in kleinen Teilen zu realisieren. Das könnte Dich dann in die Lage versetzen, ähnliche Teilprobleme selbst zu lösen. Auch für AHK gilt die alte Weisheit: Versuch macht kluch!
Wenn ich mir Dein bisheriges Skript anschaue, habe ich das Gefühl, dass ich mir Verweise auf die Hilfedatei in der Regel ersparen kann. Ist das für Dich in Ordnung?
Alsdann: Bitte das aktuelle Skript.
-
- Posts: 29
- Joined: 07 May 2017, 10:15
Re: Txt-Datei auslesen und Teile davon im Gui anzeigen
Oh, sorry, ich war heute viel unterwegs. Ich hatte nur auf Grund deiner Hinweise die Kleinigkeiten verändert:
Ja, die Verweise auf die Hilfedatei kannst du dir in der Regel ersparen. Naja und meine Fähigkeiten in Visual C# ist ähnlich wie bei Autohotkey. Recht bescheiden. Ansonsten freu ich mich, dass du so bist, wie du bist
Ja, die Verweise auf die Hilfedatei kannst du dir in der Regel ersparen. Naja und meine Fähigkeiten in Visual C# ist ähnlich wie bei Autohotkey. Recht bescheiden. Ansonsten freu ich mich, dass du so bist, wie du bist
Re: Txt-Datei auslesen und Teile davon im Gui anzeigen
OK, der erste Schritt.
Über das Thema 'Bezahlung' können wir uns unterhalten, wenn Du mit dem Skript zufrieden bist. Der AutoHotkey Foundation enstehen ja für den Betrieb dieses Forums laufende Kosten. Eine Spende mag da hilfreich sein. Mit einer kommerziellen Weiterverwertung des Skripts bin ich aber unter keinen Umständen einverstanden.
Wenn das bisher OK ist, mach mal einen Vorschlag, womit es weitergehen soll.
- Ich habe ein Objekt MT4_Instanzen eingebaut, das für die unterschiedlichen MT4-Instanzen die Namen der INI- und der Log-Dateien verwaltet. Beim Start des Skripts wird geprüft, ob die alle da sind. Die Liste für das DDL wird dabei generiert.
- Im GUI-Bereich habe ich den übrigen ListViews Namen verpasst und dem DDL einen Namen und ein Label (NewIni:). Über dieses Label werden die Aktionen gesteuert, die beim Wechsel der Instanz erforderlich sind. Die ListViews im ersten Tab werden beim Start des Skripts nicht mehr gefüllt.
- Ich habe den Aufbau des IniObjects geändert (siehe NewIni:). Zur Zeit enthalten die INI-Dateien ja nur Sektionen, zu denen jeweils eine Zeile mit Werten gehört, und ich denke, das kann auch so bleiben. Darum kann meiner Meinung nach der Sektionsname direkt als Schlüssel genutzt werden, dem als Wert die komplette Wertezeile zugewiesen wird. Das macht auch die spätere Bearbeitung einfacher.
Code: Select all
#NoEnv
#SingleInstance Force
SetWorkingDir %A_ScriptDir%
SetBatchLines -1 ; maximale Ausführungsgeschwindigkeit
; --------------------------------------------------------------------------------------------------------------------------------
; Objekt für die MT4-Instanzen. Als Schlüssel wird der Name der zugehörigen INI-Datei verwendet, die im Skriptverzeichnis liegen
; muss. Der zugewiesene Wert ist der vollständige Pfad der jeweiligen Log-Datei.
MT4_Instanzen := {"MT4-1": A_ScriptDir . "\Liste.txt"
, "MT4-2": A_ScriptDir . "\Liste.txt"
, "MT4-3": A_ScriptDir . "\Liste.txt"
, "MT4-4": A_ScriptDir . "\Liste.txt"
, "MT4-5": A_ScriptDir . "\Liste.txt"
, "MT4-6": A_ScriptDir . "\Liste.txt"
, "MT4-7": A_ScriptDir . "\Liste.txt"
, "MT4-8": A_ScriptDir . "\Liste.txt"}
IniListe := ""
For Ini, Log In MT4_Instanzen
{
IniDatei := A_ScriptDir . "\" . Ini . ".ini"
If !FileExist(IniDatei)
{
MsgBox, 16, Fehler!, Die Ini-Datei %IniDatei% fehlt!
Continue
}
If !FileExist(Log)
{
MsgBox, 16, Fehler!, Die Log-Datei %Log% konnte nicht gefunden werden!
Continue
}
IniListe .= Ini . "|"
}
IniListe := RTrim(IniListe, "|")
; --------------------------------------------------------------------------------------------------------------------------------
Menu Tray, Icon, shell32.dll, 50
; --------------------------------------------------------------------------------------------------------------------------------
Gui Font, s10, Verdana
Gui Add, Tab2, x0 y0 w1000 h510 +Buttons +0x8 +AltSubmit vTabVariable, Hauptmenu|Expert Advisor|Detail
Gui Tab, 1
Gui, Add, ListView, x100 y45 w800 h200 gShow vLV1, Expert Advisor |Magicnumber
Gui Add, DropDownList, x100 y255 w305 vDDL1 gNewIni, %IniListe%
Gui Add, Button, x415 y254 w100 h23 gEdit, &Edit
Gui Add, Button, x520 y254 w100 h23 gNew, &New
Gui Add, Button, x625 y254 w100 h23 gDelete, &Delete
Gui Add, ListView,backgroundteal csilver grid x100 y290 w800 h195 altsubmit gCopy vLV2, Kommentar |Magicnumber
Gui Tab, 2
Gui Add, ListView, x40 y35 w400 h460 vLV3, Datum |Tag |Gewinn
Gui Add, ListView, x460 y35 w300 h460 vLV4, Jahr |Monat |Gewinn
Gui Add, Button, x780 y60 w150 h23, &Komplette Historie
Gui Add, DropDownList, x780 y100 w150, EURUSD||GBPUSD|AUDUSD
Gui Tab, 3
Gui Add, ListView, x0 y20 w1000 h468 vLV5, Kommentar|Ordernummer|Closetime|Slippage|Typ|Volumen|Symbol|Gewinn
Gui Add, Text, x780 y488 w220 h23 +E0x200, Gesamtsumme:
; --------------------------------------------------------------------------------------------------------------------------------
Gui Show, w1000 h510, Analyse
Return
; --------------------------------------------------------------------------------------------------------------------------------
GuiEscape:
GuiClose:
ExitApp
; --------------------------------------------------------------------------------------------------------------------------------
NewIni:
GuiControlGet, IniName, , DDL1
IniDatei := A_ScriptDir . "\" . IniName . ".ini"
AnalyseDatei := MT4_Instanzen[IniName]
Loop, 5 ; ListViews leeren
{
Gui, ListView, LV%A_Index%
LV_Delete()
}
IniObject := {}
IniRead, Sections, %IniDatei%
Loop, Parse, Sections, `n
{
Section := A_LoopField
IniRead, Value, %IniDatei%, %Section%
IniObject[Section] := Value
}
GoSub, FillLV2
GoSub, FillLV1
Return
; --------------------------------------------------------------------------------------------------------------------------------
FillLV1:
Gui, ListView, LV1
GuiControl, -ReDraw, LV1
For Section, Numbers In IniObject
LV_Add("", Section, Numbers)
Loop, % LV_GetCount("Column")
LV_ModifyCol(A_Index, "AutoHdr")
GuiControl, +ReDraw, LV1
Return
; --------------------------------------------------------------------------------------------------------------------------------
FillLV2:
Gui, ListView, LV2
GuiControl, -ReDraw, LV2
LV2_Array := []
LV2_Columns := 2
EA_Index := 12
MN_Index := 4
Loop, Read, %AnalyseDatei%
{
If (A_Index > 1)
{
Split := StrSplit(A_LoopReadLine, ";")
EA := Split[EA_Index]
MN := Split[MN_Index]
If LV2_Array.HasKey(EA)
LV2_Array[EA] .= " " . MN
Else
LV2_Array[EA] := MN
}
}
For EA, MN In LV2_Array
{
Sort, MN, D%A_Space% N U
LV_Add("", EA, MN)
}
Loop, %LV2_Columns%
LV_ModifyCol(A_Index, "AutoHdr")
GuiControl, +ReDraw, LV2
Return
; --------------------------------------------------------------------------------------------------------------------------------
Copy:
Gui, ListView, LV2
If (A_GuiEvent = "Normal") && (Selected := LV_GetNext())
{
LV_GetText(MN, Selected, 2)
Gui Copy: New
Gui Font, s10, Verdana
Gui Add, Edit, x0 y0 h80 w600 vCopyED, %MN%
Gui Show, h80 w600, Copy
}
Return
CopyGuiclose:
Gui, Destroy
Return
; --------------------------------------------------------------------------------------------------------------------------------
Edit:
Gui, ListView, LV1
If (Selected := LV_GetNext())
{
LV_GetText(CurrentIndex, Selected, 1)
LV_GetText(CurrentSection, Selected, 2)
Gui Edit: New
Gui Font, s10, Verdana
Gui Add, Edit, x12 y12 h25 w577 vEdit1, %CurrentIndex%
Gui Add, Edit, x12 y50 h80 w577 vEdit2, %CurrentSection%
Gui Add, Button, x240 y140 w120 h25 gSave, &Save
Gui Show, h177 w600, Edit
}
Return
EditGuiclose:
Gui, Destroy
Return
Save:
GuiControl, +Redraw, SysListView321
Gui, Destroy
Return
; --------------------------------------------------------------------------------------------------------------------------------
New:
Gui, ListView, LV1
Gui New: New
Gui Font, s10, Verdana
Gui Add, Edit, x12 y12 h25 w577 vNew1
Gui Add, Edit, x12 y50 h80 w577 vNew2
Gui Add, Button, x240 y140 w120 h25 gSave, &Save
Gui Show, h177 w600, New
Return
NewGuiclose:
Gui, Destroy
Return
; --------------------------------------------------------------------------------------------------------------------------------
Delete:
Gui, ListView, LV1
If (Selected := LV_GetNext())
{
Loop, 5
LV_GetText(CurrentIndex, Selected, 1)
Gui Delete: New
Gui Font, s10, Verdana
Gui Add, Text, x10 y22 w380 h25 +0x200 Center, %CurrentIndex% löschen?
Gui Add, Button, x50 y65 w120 h25 gJa, &Ja
Gui Add, Button, x220 y65 w120 h25 gNein, &Nein
Gui Show, w400 h115, Delete
}
Return
Nein:
DeleteGuiclose:
Gui, Destroy
Return
Ja:
Loop, % Line0 - CurrentIndex + 1
{
CurrentIndex := A_Index - 1
CurrentSection := A_LoopField - 1
IniObject[CurrentIndex] := [CurrentSection]
}
Line0--
;GoSub,Filllist
Gui, Destroy
Return
; --------------------------------------------------------------------------------------------------------------------------------
Show:
Gui, ListView, LV1
If (A_GuiEvent = "Doubleclick") && (Selected := LV_GetNext())
{
LV_GetText(CurrentSection, Selected, 2)
}
Guicontrol, Focus, Gui Tab 2
Return
Wenn das bisher OK ist, mach mal einen Vorschlag, womit es weitergehen soll.
Who is online
Users browsing this forum: No registered users and 28 guests