Neverending Story: Frage(n) zu Regex...

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
Gucky_87
Posts: 375
Joined: 03 Jul 2014, 05:09

Neverending Story: Frage(n) zu Regex...

25 Dec 2018, 17:36

Frohe Weihnachten an alle,

ich kapituliere wieder mal vor RegExMatch/, bzw. -Replace.

Ich habe folgenden Text aus einer CSV Datei:
0;111111;20171214;17:30;301714;0;"REG";1;"BEDIENER 1";0;1;256;"DEPT";1;"BRÖTCHEN";1;1.000;0.60;0.60;"A";0;0;0;0;0;0;0;0;0

Legende:
Grün = Datum (immer 8 stellig), das ich weiter verarbeiten möchte
Blau = Uhrzeit (immer 5 Stellig mit :), die ich späpter im Script benötige
Rot = Immer eine Zahl mit 1-8 Stellen, die ich im Script noch brauche
Orange Immer 0 oder 1, die ich auch im Script noch verwenden muss

Ich muss jede Zeile auf die farbig markieren Textstellen prüfen und dann entscheiden, was ich weiter damit machen soll.
Der eigentliche Vergleich mit RegExMatch funktioniert, aber ich möchte die Farbigen Werte mit RegExReplace (wenn das geht) so bearbeiten, dass ich jeden Wert als $1, $2, $3... übrig behalte und dass der Rest komplett gelöscht wird.

Mir würde der gesamte Text ($1$2$4...) in einer Variable ausreichen, aber bisher krieg ich das nicht hin.
Ich hab es auch mit der "O)" Option versucht, aber irgendwie verstehe ich offenbar die Anleitung da nicht, denn das Match Objekt ist immer leer.
Wenn es natürlich als Objekt geht, wäre das noch einfacher handlebar ;)

Frage 2: Die " finde ich bisher mit ".". Ich habe den RexEx Tester benutzt und dort \" eingesetzt, was funktioniert. Im Script scheint das mit der 1.1.30.01 nicht zu funktionieren. Ok mit dem Punkt klappt es ja auch, von daher kein Ding.

Frage 3:
Die Angabe "BEDIENER 1" kann ggf. in anderen CSV Dateien variieren. Die " bleiben aber. Sie kann ich solche unbestimmten Texte finden? Nur mit .{0,x} ?
Diese Texte können Buchstaben, Zahlen, aber auch Sonderzeichen (sogar ") enthalten.

Wenn mir dazu vielleicht jemand einen Tipp geben könnte, wäre das klasse.

Gucky.

Allen schon mal einen guten und gesunden Rutsch.
swagfag
Posts: 6222
Joined: 11 Jan 2017, 17:59

Re: Neverending Story: Frage(n) zu Regex...

25 Dec 2018, 19:55

Code: Select all

csv = 0;111111;20171214;17:30;301714;0;"REG";1;"BEDIENER 1";0;1;256;"DEPT";1;"BRÖTCHEN";1;1.000;0.60;0.60;"A";0;0;0;0;0;0;0;0;0

skip := "[^;]*;?" ; anything not semi-colon, optionally followed by semi-colon 
RegExMatch(csv, "O)" skip skip "(?P<date>[^;]*);(?P<time>[^;]*);" skip skip skip skip "(?P<lets_pretend_this_is_red>[^;]*);" skip skip skip skip skip skip "(?P<one_or_zero>[^;]*);", MatchObj)

MsgBox % MatchObj.date
MsgBox % MatchObj.time
MsgBox % MatchObj.lets_pretend_this_is_red
MsgBox % MatchObj.one_or_zero
https://tools.ietf.org/html/rfc4180#section-2 compliant(well, except ure using ; but w/e):

Code: Select all

csv = 0;111111;20171214;17:30;301714;0;"REG";1;"BEDIENER 1";0;1;256;"DEPT";1;"BRÖTCHEN";1;1.000;0.60;0.60;"A";0;0;0;0;0;0;0;0;0

skip = ({}"(?:[^"]|"")*"|[^;]*);?
namedVar = ?P<{}>

date := Format(skip, Format(namedVar, "date"))
time := Format(skip, Format(namedVar, "time"))
lets_pretend_this_is_red := Format(skip, Format(namedVar, "lets_pretend_this_is_red"))
one_or_zero := Format(skip, Format(namedVar, "one_or_zero"))

RegExMatch(csv, "O)" skip skip date time skip skip skip skip lets_pretend_this_is_red skip skip skip skip skip skip one_or_zero, MatchObj)

MsgBox % MatchObj.date
MsgBox % MatchObj.time
MsgBox % MatchObj.lets_pretend_this_is_red
MsgBox % MatchObj.one_or_zero
Last edited by swagfag on 26 Dec 2018, 11:15, edited 1 time in total.
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Neverending Story: Frage(n) zu Regex...

26 Dec 2018, 05:14

Mit RegEx kannst du sehr viel machen - zum Beispiel kannst du alle Zeichen oder Zeichenketten erhalten die nicht einer bestimmten anderen entsprechen.
Genau das solltest du dir bei csv zu Nutze machen.
Mit [^;]+ kannst du alle Zeichen erhalten die kein Semikolon sind.
Andernfalls gibt es noch die Möglichkeit mit der Gier von RegEx zu arbeiten. Wenn du einen Suchstring ungierig machst würde er bei der ersten Gelegenheit die sich bietet aufhören.
.*? Nimmt jeden character oder keinen aber so wenig wie möglich. In Kombination mit einer Endsequenz kann dies sehr hilfreich sein:
".*?";

Als nächstes würde ich dir empfehlen die Daten zuerst in einzelne Zeilen aufzuschneiden und dann einzeln zu modifizieren. Um alles wieder in eines Datei zu speichern musst du die Werte nur aneinander hängen und die alte Datei überschreiben.
Recommends AHK Studio
User avatar
LuckyJoe
Posts: 341
Joined: 02 Oct 2013, 09:52

Re: Neverending Story: Frage(n) zu Regex...

26 Dec 2018, 09:38

Hi Gucky,

muss es unbedingt RegEx sein? Es bietet sich doch an, die Zeile bei ";" zu splitten, wenn die Daten immer in der gleichen "Anordnung" vorkommen (sollte so bei csv-Dateien der Fall sein):

Code: Select all

csv = 0;111111;20171214;17:30;301714;0;"REG";1;"BEDIENER 1";0;1;256;"DEPT";1;"BRÖTCHEN";1;1.000;0.60;0.60;"A";0;0;0;0;0;0;0;0;0
Teil := StrSplit(csv,";")
MsgBox, % Teil[3] "`n" Teil[4] "`n" Teil[5] "`n" Teil[16]
Viel Erfolg.
HG - Lucky Joe
Herzliche Grüße aus dem Rheinland
Lucky Joe
just me
Posts: 9458
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Neverending Story: Frage(n) zu Regex...

26 Dec 2018, 09:47

Moin,

CSV-Dateien haben üblicherweise eine vorteilhafte Eigenschaft: Sie enthalten anders als normale Textdateien strukturierte Daten, d.h., die Zeilen bestehen aus einer Reihe von Feldern/Werten, die durch ein bestimmtes Zeichen getrennt sind. Wenn man nun einfach nur auf die Inhalte ausgewählter Felder zugreifen will, ist ein RegEx normalerweise nicht das Mittel der Wahl. Wenn man nicht das Pech hat, dass das Feldtrennzeichen auch innerhalb der Felder vorkommen kann, kann man die Sätze locker mit StrSplit() aufsplitten und dann über den Feldindex auf die Feldinhalte zugreifen:

Code: Select all

#NoEnv
CSV = 0;111111;20171214;17:30;301714;0;"REG";1;"BEDIENER 1";0;1;256;"DEPT";1;"BRÖTCHEN";1;1.000;0.60;0.60;"A";0;0;0;0;0;0;0;0;0

DateIndex := 3
TimeIndex := 4
NumIndex := 5
F16Index := 16

Split := StrSplit(CSV, ";", """", F16Index + 1)

MsgBox, % "Datum: " . Split[DateIndex] . "`n"
        . "Zeit: "  . Split[TimeIndex] . "`n"
        . "Nummer: " . Split[NumIndex] . "`n"
        . "Feld16: " . Split[F16Index]
Wenn der Feldtrenner das für CSV ursprünglich verwendete Komma und der Textbegrenzer das Anführungszeichen (") sind, geht auch ein

Code: Select all

Loop, Parse, Eingabevariable, CSV
Ansonsten muss man die Textfelder evtl. händisch nachbessern. Wenn in diesem Fall auch noch das Feldtrennzeichen innerhalb von Textfeldern vorkommen kann, ist der Einsatz von etwas mehr Hirnschmalz erforderlich.

Edit: Lucky Joe spricht mir aus der Seele! ;)

Ich wünsche Euch noch einen frohen zweiten Weihnachtsfeiertag!
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Neverending Story: Frage(n) zu Regex...

26 Dec 2018, 09:54

Er hat extra erwähnt, dass Sonderzeichen innerhalb von den Texten vorkommen können.
Von daher habe ich StrSplit von Anfang an ausgeschlossen.
Recommends AHK Studio
just me
Posts: 9458
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Neverending Story: Frage(n) zu Regex...

26 Dec 2018, 10:08

In diesem Fall geht es ja nur um genau ein Zeichen: ;

Und wenn tatsächlich ein ; in einem der geprüften Felder steht, geht der RegEx von swgafg auch in die Wüste.
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Neverending Story: Frage(n) zu Regex...

26 Dec 2018, 11:16

Auch ein " könnte bei dir Probleme verursachen.
Daher sind " und ; problematisch.

Ich habe das Gefühl das swagfag die Frage nicht ganz übersetzen konnte.
Ich würde sie nicht als eine direkte Antwort sehen.
Ich habe mit mir gehadert, ob ich den post nicht eventuell löschen sollte.

Vor einiger Zeit hat mir das hier geholfen:
(?:"((?:[^"]+|"")*)"|([^;]*))(?:;|$)
https://regex101.com/r/Vab3oA/1
Ich nehme das ganze mal auseinander:
  • (?:"((?:[^"]+|"")*)"|([^;]*))
    Dieser Teil ist Zuständig dafür den Zelleninhalt zu erhalten.
  • (?:;|$)
    Dieser hier ist dafür zuständig, um das Ende einer Zelle zu finden (in unserem Falle entweder ein ; oder das Ende des Textes)
  • "((?:[^"]+|"")*)"
    Dieser Teil behandelt Zelleninhalt der mit " umschlossen ist.
    Der Regex startet und endet mit "".
    Alles was darinne steht wird von den äußeren Klammern aufgenfangen und in die Ausgabevariablen geschrieben.
    Die inneren Klammern mit (?:[^"]+|"") und gefolgt von * sorgen dafür, dass eine Alternative kein bis unendlich mal wiederholt wird.
    Die Alternativen sind:
    [^"]+ ein oder mehrere Zeichen welche kein " sind,
    oder mit "" Zwei aufeinanderfolgende "". - in meinen CSV Daten wurden 2 "" benutzt um ein " darzustellen.
    Quasi escaping wie in AutoHotkey.
  • ([^;]*)
    Dieser Teil befasst sich mit Zelleninhalt der ohne " auskommt
    Hier werden 0-unendlich Zeichen in die Ausgabe geschrieben, die kein ; sind.
Um diesen Regex Ausdurck in AHK zu verwenden müssen wir noch die ganzen " verdoppeln und das ganze in " verpacken:

Code: Select all

RegExMatch(reihenText, "(?:""((?:[^""]+|"""")*)""|([^;]*))(?:;|$)", ausgabeVariable)
Ein AHK code dr diesen RegExmatch verwendet um eine CSV Date auszulesen könnte so ausehen:

Code: Select all

tabelle := []
For each, reihenText in StrSplit(csvTabellenText, "`r`n") {
	reihe := [] ;erzeuge eine neue Reihe
	tabelle.push(reihe) ;füge diese Reihe der Tabelle hinzu
	match := 1
	While ((match+StrLen(ausgabeVariable) < StrLen(reihenText)) && match := RegExMatch(reihenText, "(?:""((?:[^""]+|"""")*)""|([^;]*))(?:;|$)", ausgabeVariable, match+StrLen(ausgabeVariable))) {
		if (ausgabeVariable1) ;wenn es eine Zelle ist die mit " umwickelt ist
			reihe.push(strReplace(ausgabeVariable1, """""", """"))  ;dann schreibe den Inhalt in eine neue Zelle - nachdem "" durch " ersetzt wurde
		else ;falls es eine Zelle ist die nicht mit " umwickelt ist, oder eine leere Zelle ist
			reihe.push(ausgabeVariable2) ;dann schreibe den inhalt direkt
	}
}
Am Ende erhälst du ein array mit Reihen die wiederum Zellen mit Daten enthalten.
Recommends AHK Studio
User avatar
Gucky_87
Posts: 375
Joined: 03 Jul 2014, 05:09

Re: Neverending Story: Frage(n) zu Regex...

03 Jan 2019, 10:47

Ein frohes, neues (nachträglich).
Ich hoffe, Ihr seid alle gut und gesund gerutscht?

Erst einmal lieben Dank für Eure Mühe.

Als ich nnniks Beitrag las, musste ich vor Schreck erstmal husten XD

Ich habe mal eine komplette CSV Testdatei angehängt, damit ich genau(er) erklären kann, was ich machen möchte/muss, denn ich denke, nnnik hat zwar alles richtig gemacht (DANKE dafür!), nur ich habe vielleicht falsch gefragt. Ich denke, meine bisherige Herangehensweise an das Problem ist/war falsch (?)
Aber seine Ausführungen haben evtl. ein wenig Licht für mich in diese verzwickten Klammern gebracht. Damit werde ich generell mal etwas üben.

In der Beispieldatei gibt es die Zeilen 4 bis 10, die sich EXAKT in den Zeilen 11 bis 17 wiederholen.
Der beinahe (!) gleiche Textblock wird dann nochmals in den darauf folgenden Zeilen ausgegeben.
Die Unterschiede liegen in der 3. Zahl von hinten, die dort eine 1 ist. Außerdem gibt es dort nicht die Zeilennummerierung 1, sondern diese Blöcke beginnen IMMER bei 2. Diese Textblöcke muss ich nicht filtern, sondern nur die EXAKTEN Kopien der Zeilen 4 bis 10, bzw. in längeren Dateien natürlich entsprechende Textblöcke.
Von den zu filternden Textblöcken könnte es theoretisch endlos viele geben, meist sind es aber nur 1 bis 2 Kopien. Sie liegen aber generell immer direkt hintereinander (also ab Zeile 11, 18, 25, u.s.w) . Es kann nicht sein, dass die Zeilen 4 bis 10 irgendwo bei 13983 nochmal kommen.

Meine Idee bisher ist (Ich bastel da aber noch an einem halbwegs lauffähigen Code), dass ich jede
Zuerst prüfe ich jedes Zeilenende auf ";1;0;0". Wird es gefunden und ist NICHT das Wort "REG" enthalten, wird die gesamte Überprüfung (der Loop) übersprungen, da diese Textblöcke ja erhalten bleiben sollen.
Dann prüfe ich in einer Schleife, ob die aktuelle Zeile vom 1. Zeichen bis zum "REG" identisch ist und speichere die laufende Nr. (im Beispiel die 7) in einer Variable und zähle diesen Vorgang, um nachher die Anzahl der gelöschten Kopien ausgeben zu können.
Ist dies auch der Fall, muss ich nur noch de Nummerierung er einzelnen Zeilen prüfen (die Zahl hinter "BEDIENER 1";0;). Diese ist immer fortlaufend, ich muss also nur vergleichen, ob der Wert der aktuellen Zeile niedriger oder höher ist als der der folgenden Zeile.
Der Text "BEDIENER 1" (darum auch meine Frage nach unbestimmten Zeichen), könnte z.B. auch "@Peter_~;." sein. Das ist zwar unwahrscheinlich, technisch aber möglich. Es können 0 bis max. 16 Zeichen sein (also auch "" ist möglich).

Bisher lese ich die CSV Datei in eine Variable ein und splitte dann jede Zeile in ein Array (CSV[1 ... n]). Aus diesem wollte ich dann die nicht benötigten Kopien einfach per CSV.remove[A_Index] löschen und das Array danach in eine neue Datei zurück schreiben.

Hier zur Veranschaulichung der Teil, dessen exakte Kopien nachher fehlen müssen:

Code: Select all

04    0;0;20181227;09:41;7;0;"REG";1;"BEDIENER 1";0;1;256;"DEPT";1;"LADENVERKAUF";1;1.000;44.44;44.44;"B";0;0;0;0;0;0;0;0;0
05    0;0;20181227;09:41;7;0;"REG";1;"BEDIENER 1";0;2;256;"DEPT";1;"LADENVERKAUF";1;1.000;55.55;55.55;"B";0;0;0;0;0;0;0;0;0
06    0;0;20181227;09:41;7;0;"REG";1;"BEDIENER 1";0;3;2048;"ZWI.SUMME";0;" ";0;0.000;0.00;99.99;" ";0;0;0;0;0;0;0;0;0
07    0;0;20181227;09:41;7;0;"REG";1;"BEDIENER 1";0;4;10498;"UMSATZ 19 %";0;" ";0;0.000;0.00;99.99;" ";0;0;0;0;0;0;0;0;0
08    0;0;20181227;09:41;7;0;"REG";1;"BEDIENER 1";0;5;20738;"MWST";0;" ";0;0.000;0.00;15.96;" ";0;0;0;0;0;0;0;0;0
09    0;0;20181227;09:41;7;0;"REG";1;"BEDIENER 1";0;6;3330;"NETTO  19 %";0;" ";0;0.000;0.00;84.03;" ";0;0;0;0;0;0;0;0;0
10    0;0;20181227;09:41;7;0;"REG";1;"BEDIENER 1";0;7;4609;"BAR";0;" ";0;0.000;0.00;99.99;" ";0;0;0;0;0;0;0;0;0
Ich möchte nicht unbedingt, dass Ihr meine Arbeit macht, daher verlange ich keine fertige Routine dafür. Viel lieber möchte ich (gerade was das RegEx) angeht, Eure Vorschläge, um daraus zu lernen und vllt. endlich mal dieses Thema ein wenig zu verstehen.

Kleiner Hinweis zum Schluss:
Diese CSV Datien können 1 bis ca. 3.000.000 Zeilen haben, meist sind es um die 800.000 bis 1.000.000. Darum auch dieser Aufwand, denn solche Dateien will wirklich niemand händisch durchsuchen ;)

Vielen Dank fürs Lesen und natürlich denen, die sich noch dazu damit beschäftigen,

Gucky.
Attachments
EJ20181227_0001_Aus.csv
(9.7 KiB) Downloaded 62 times
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Neverending Story: Frage(n) zu Regex...

03 Jan 2019, 13:04

Ich würde hier zum finden einer Herangehensweise SQL Logik anwenden.
SQL ist eine Sprache welche für die Kommunikation mit Datenbanken (also riesigen Tabellen) ausgelegt ist.
Die Modifikation einer Datenbank wie du es planst passt also genau ins Schema.
Zudem wäre deine Aufgabenstellung in SQL genau 1 Zeile code.

SQL denkt anders als andere Sprachen in den meisten Teilen nicht in Reihenfolgen und Schritt für Schritt sondern arbeitet mit Mengen.
Du hast eine Menge mit CSV Einträgen vorgegeben.
Jeder CSV Eintrag hat 3 Attribute - einmal einen der ihn Identifizierbar macht, einen der Bestimmt ob er eventuell weggeschmissen wird und ein dritter der Bestimmt ob durch diesen ein anderer weggeschmissen wird.
Das Ziel ist es eine neue Menge zu erhalten welche keine Werte enthalten, die eventuell gelöscht werden sollen, einen 2. Eintrag haben, der ihre Identität teilt und besagt, das der erste gelöscht werden soll.
Nun sammelst du eine Menge 🚮 mit CSV Einträgen die eventuell weggeschmissen werden.
Zudem sammelst du eine Menge ♻ der CSV Einträge die die gleiche identität haben wie ein Eintrag in 🚮.
Zuletzt sammelst du alle CSV Einträge von 🚮 die einen Eintrag in ♻ haben, der besagt, dass sie weggeschmissen werden sollen.
Zum Schluss musst du nur noch alle diese CSV Einträge löschen.


Zum Sammeln und identifizieren lohnt es sich eine Sammlung(Collection) zu verwenden.
Der Hauptsinn einer Collection besteht darin, dass ein Eintrag genau einmal vorkommen kann.
In AHK kann man diese extrem einfach erzeugen, indem man einen AssoziativesArray verwendet und die Werte als Keys speichert (anstatt sie als Value zu speichern).

Code: Select all

Collection := {}
Collection["Hello World"] := "" ;der Wert ist egal
Collection["Hello World"] := "" ;wie bereits gesagt wird hier nichts neues gespeichert sondern einfach nur nichts gemacht
Man kann nun über Collection.hasKey("Hello World") erfahren, dass Hello World bereits vorhanden ist.

Das schöne an dieser Methode ist, dass man in den Daten noch Extrainformationen speichern kann.
In deinem Fall wäre das nützlich um zu speichern um welchen CSV Eintrag es sich handelt.

Zum erhalten der Attribute aus einem CSVEintrag, lohnt es sich Funktionen zu schreiben und diese in deinem Code zu verwenden.
Eventuell kannst du hier auch deinen CSVEintrag in ein Objekt zu verwandeln um deine Daten leichter auszulesen - ich würde es aber hier nicht als wirklich notwendig empfinden.
Ich mache es normalerweise eigentlich immer und habe damit gute Erfahrungen gemacht - es ist aber auch Aufwand.

Ich würde dir nicht empfehlen dich groß um Blockreihenfolge zu kümmern es sei denn du musst das absolut machen.

Wenn du deine CSVEinträge in einem zentralen Array speicherst empfehle ich dir erst zum Schluss Einträge daraus zu löschen.
Dann kannst du nämlich über die Zeilennummer CSVEinträge genau bestimmen.
Wenn du dann zum Schluss löschst, fang von hinten an, da du sonst die Daten im letzten Schritt beschädigst.
Recommends AHK Studio
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Neverending Story: Frage(n) zu Regex...

03 Jan 2019, 13:05

@Offtopic es freut mich das dir mein Post geholfen hat. :)
Recommends AHK Studio
User avatar
Gucky_87
Posts: 375
Joined: 03 Jul 2014, 05:09

Re: Neverending Story: Frage(n) zu Regex...

04 Jan 2019, 03:54

@Offtopic es freut mich das dir mein Post geholfen hat.
Gern XD


An SQL (ich weiß, Du meintest nur die Ähnlichkeit zu SQL) habe ich dabei auch schon gedacht, aber davon habe ich leider noch 0.001% Ahnung.
Ich habe mir mal eine Test Datenbank gemacht und weiß auch, wie ich Einträge rein und raus bekomme, sowie wie einfach(st)e Abfragen funktionieren.
Mehr habe ich aber noch nicht gemacht.

Auf jeden Fall ist Dein Ansatz nicht schlecht und ich werde mal versuchen, da ran zu gehen.

Danke Dir auf alle Fälle für´s Nachdenken,

Gucky.
User avatar
LuckyJoe
Posts: 341
Joined: 02 Oct 2013, 09:52

Re: Neverending Story: Frage(n) zu Regex...

04 Jan 2019, 04:00

Hi Gucky,

du arbeitest mit einer CSV-Datei, da bietet sich meiner Meinung nach zum Auswerten am besten Excel an. Dabei kann die CSV-Datei so groß sein, wie deine Excel-Version es zulässt.
Entweder arbeitest du innerhalb von Excel direkt mit VBA oder "von außen" mit AHK. Hier mal ein kleiner Einblick:

Code: Select all

#NoEnv
#SingleInstance force
SetWorkingDir %A_ScriptDir%

WorkBookPath = %A_ScriptDir%\EJ20181227_0001_Aus.csv

Excel		:= ComObjCreate("Excel.Application")	
WorkBook	:= Excel.Workbooks.Open(WorkBookPath)	
Sheet		:= Excel.ActiveSheet					
; Excel.Visible := True

i := 1
while i < 5
  {
    i++
	; gibt Zeile i, Splate 12 ("L") aus:
    Zelle := Sheet.cells(i, 12).Value
    Msgbox % Zelle
  }

;WorkBook.Save
WorkBook.Close(0) 						
Excel := ComObject.Close							
Excel.Quit
ExitApp
Ich würde das ganze Problem aber dann lieber innerhalb von Excel mit VBA angehen.

Egal ob mit Excel oder AHK: Viel Erfolg!

HG - Lucky Joe
Herzliche Grüße aus dem Rheinland
Lucky Joe
User avatar
Gucky_87
Posts: 375
Joined: 03 Jul 2014, 05:09

Re: Neverending Story: Frage(n) zu Regex...

10 Jan 2019, 06:54

Das geht leider nicht, da ich das Script an Leute weiter geben will/muss, die kein Office haben.
Dran gedacht habe ich auch schon und Deine Idee wäre daher dafür auch super klasse.

Ich arbeite aber gerade an einer AHK only Lösung.
Bin gespannt, ob ich das hin bekomme.

Gruß,

Gucky.
User avatar
SL5
Posts: 879
Joined: 12 May 2015, 02:10
Contact:

Re: Neverending Story: Frage(n) zu Regex...

10 Jan 2019, 07:13

Gucky_87 wrote:
04 Jan 2019, 03:54
... An SQL (ich weiß, Du meintest nur die Ähnlichkeit zu SQL) habe ich dabei auch schon gedacht, aber davon habe ich leider noch 0.001% Ahnung...
falls du doch mal magst. is nich so schwer:
https://www.heise.de/download/product/d ... lite-41685
https://github.com/sqlitebrowser/sqlitebrowser/releases
https://glossar.hs-augsburg.de/SQLite#Beispiel
User avatar
Gucky_87
Posts: 375
Joined: 03 Jul 2014, 05:09

Re: Neverending Story: Frage(n) zu Regex...

10 Jan 2019, 07:46

Hey, lieben Dank dafür. Da schau ich rein, denn das könnte mir bei etwas anderem auch noch helfen.

Gucky.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 67 guests