Variable Zeilenweise auslesen

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Folllast
Posts: 91
Joined: 24 Jan 2018, 04:57

Variable Zeilenweise auslesen

12 Mar 2018, 03:00

Hallo,

aktuell habe ich einen Script, der in Schritt A div. Daten auswertet und Zeilenweise in eine .csv speichert, in Schritt B diese .csv ausließt, sortiert, wieder speichert und in Schritt C die Daten Zeilenweise ausließt und auswertet/zusammenfasst.

Gibt es eine schöne Möglichkeit, statt einer externen .csv die daten in einer Internen Variable zu Speichern und diese Zeilenweise abzuarbeiten? Mir würde nur einfallen, Die variable mit StrSplit bei `n zu trennen und dann immer den ersten Wert zu nehmen und den danach zu löschen. Wenn man dann wiever von vorn anfängt sollte ja die Zweite Zeile an erster Stelle stehen. Gibt es eine schönere Möglichkeit um Variablen "Zeilenweise" zu verarbeiten, ähnlich wie "LoopReadLine"?

Vielen dank schonmal!
Folllast
Posts: 91
Joined: 24 Jan 2018, 04:57

Re: Variable Zeilenweise auslesen

12 Mar 2018, 03:38

Hallo,

ich bin jetzt soweit, dass ich die Variable dann mit Loop, Parse, text , `n, `n in einzelne Zeilen aufwandel, die ich dann in dem Loop verarbeite. Leider funktioniert das mit dem Entfernen vom Zeilenumbruch nicht. Woran liegt es?

Gesamter Codeausschnitt

Code: Select all

Loop, Parse, text , `n, `n
{
	textzeile :=  A_LoopField
	MsgBox, %textzeile%ok
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Variable Zeilenweise auslesen

12 Mar 2018, 03:42

Zeilenumbrüche können aus `n bestehen.
Manchmal bestehen sie aber auch aus `r`n oder `r.

Code: Select all

Loop, Parse, text , `n, `r
	MsgBox, %A_LoopField%ok
Recommends AHK Studio
Folllast
Posts: 91
Joined: 24 Jan 2018, 04:57

Re: Variable Zeilenweise auslesen

12 Mar 2018, 03:44

funktioniert `r immer oder muss ich bei jedem mal durchprobieren?

Was ist der grund für die verschiedenen Zeilenumbrüche?
just me
Posts: 9457
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Variable Zeilenweise auslesen

12 Mar 2018, 06:05

Moin,

es gibt 3 'Standards' für den Zeilenumbruch:
  • Windows:
    `r`n -> CRLF
  • Mac:
    `r -> CR
  • Unix/Linux:
    `n-> LF
Mit

Code: Select all

Loop, Parse, VariableMitDateiinhalt, `n, `r
bist Du unter Windows normalerweise auf der sicheren Seite, selbst wenn die Datei nur `n allein für den Zeilenumbruch nutzt.
just me
Posts: 9457
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Variable Zeilenweise auslesen

12 Mar 2018, 06:26

Es gibt übrigens eine weitere Alternative, die Funktion StrSplit(). Damit kannst Du den Dateiinhalt in ein Zeilenarray überführen:

Code: Select all

ZeilenArray := StrSplit(VariableMitDateiinhalt, "`n", "`r")
Das Array kannst Du dann in einer For-Schleife abarbeiten:

Code: Select all

For ZeilenNummer, ZeilenInhalt In ZeilenArray {
   MsgBox, 0, Zeile %ZeilenNummer%, %ZeilenInhalt%
}
Alternativ kannst Du über die Zeilennummer auch direkt auf eine bestimmte Zeile zugreifen:

Code: Select all

ZeilenInhalt := ZeilenArray[3] ; stellt den Inhalt der dritten Zeile in die Variable ZeilenInhalt.
Nachteil: Bei großen Dateien verbraucht das zumindest kurzfristig recht viel zusätzlichen Speicherplatz.
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Variable Zeilenweise auslesen

12 Mar 2018, 07:02

Code: Select all

Loop, Parse, text , `r`n
{
; textzeile :=  A_LoopField   ; < die variable textzeile mit A_LoopField ständig überschreiben
  textzeile .= A_LoopField    ; < an die variable textzeile den content von A_LoopField anhängen
  MsgBox, % textzeile
}
... der zeilenumbruch geht dabei doch flöten!
Stört sich keiner dran, das er den zeilenumbruch/new line bei seinem Loop, Parse explizit "ommited"? :wtf:
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Variable Zeilenweise auslesen

12 Mar 2018, 08:02

Nein der Zeilenumbruch geht so oder so flöten wenn du ihn als separator verwendest.
Und wenn du `r`n als Zeilenumbruchszeichen wählst funktioniert der Loop nicht für den in AHK viel häufigeren Fall, dass `n als Zeilenumbruchszeichen verwendet wird.
Recommends AHK Studio
User avatar
divanebaba
Posts: 805
Joined: 20 Dec 2016, 03:53
Location: Diaspora

Re: Variable Zeilenweise auslesen

14 Mar 2018, 11:31

Folllast wrote:

Code: Select all

Loop, Parse, text , `n, `n
BoBo wrote:... Stört sich keiner dran, das er den zeilenumbruch/new line bei seinem Loop, Parse explizit "ommited"? :wtf:
Jetzt wo Du es sagst. Ich dachte fälschlicherweise an ein StringReplace, bei dem er einen Zeilenumbruch mit einem Zeilenumbruch austauscht. Schlimmer noch: "omitted" :lol: :lol:
Einfach nur ein toller Typ. :mrgreen:
Folllast
Posts: 91
Joined: 24 Jan 2018, 04:57

Re: Variable Zeilenweise auslesen

15 Mar 2018, 00:31

divanebaba wrote:
Folllast wrote:

Code: Select all

Loop, Parse, text , `n, `n
BoBo wrote:... Stört sich keiner dran, das er den zeilenumbruch/new line bei seinem Loop, Parse explizit "ommited"? :wtf:
Jetzt wo Du es sagst. Ich dachte fälschlicherweise an ein StringReplace, bei dem er einen Zeilenumbruch mit einem Zeilenumbruch austauscht. Schlimmer noch: "omitted" :lol: :lol:

was heisst das für mich? bin ich ein schlechter Mensch? und warum?
just me
Posts: 9457
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Variable Zeilenweise auslesen

15 Mar 2018, 03:31

Wenn Du den Inhalt einer Variablen per Loop, Parse, StringSplit oder StrSplit in Einzelteile zerlegst, werden die als 'Trennzeichen(folge)" festgelegten Zeichen nicht in die 'Einzelteile' übernommen.

Wenn z.B. das Trennzeichen ein Zeilenumbruch ist, bedeutet das, dass Du den Zeilenumbruch in der Regel wieder anfügen musst, wenn Du das 'Einzelteil' wieder in eine Datei schreiben willst.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: just me and 51 guests