 |
AutoHotkey Community Wir helfen uns gegenseitig aus der Patsche
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
macmewes
Anmeldedatum: 04.07.2006 Beiträge: 35
|
Verfasst am: Sa Nov 18, 2006 6:15 pm Titel: Textblock Relationen n:1 auflösen |
|
|
Also, ich hätte da gerne mal ein Problem.
Der Softwareanbieter XYZ versendet Lieferscheine und auf denen sind Textblöcke druff, die ungefähr so aussehen:
| Code: |
Lizenzhalter: Ihr Name
Lizenzkey: 123456
Gültigkeitsdatum: 99.99.9999
Alter Key: 789456
|
Ich kann diese Lieferscheine mit EINEM Textblock relativ simpel mit einem "loop, parse" erfassen und diese Daten extrahieren. Diese Daten sollen in eine Lizenzdatenbank rein. Alles easy und kein Problem.
Am Ende weiß ich: Neuer Key 123456 für Ihr Name ist Software XYZ mit Gültigkeit bis 99.99.9999 und ist ein Upgrade auf 789456.
Kann aber auch sein, daß das Teil keine Gültigkeit hat - kann ich alles abfangen, wenn ich nur einen Textblock habe. Alles easy und gut.
Nun kommt es aber bedauerlicherweise vor, daß Kunden nicht nur ein Stück Software pro Bestellung aufgeben, sondern gleich n Stücke an Software.
Hinterher steht dann im Lieferschein:
| Code: |
Lizenzhalter: Ihr Name
Lizenzkey: 123456
Gültigkeitsdatum: 99.99.9999
Alter Key: 789456
Lizenzhalter: Ihr Name
Lizenzkey: 123456
Gültigkeitsdatum: 99.99.9999
Lizenzhalter: Ihr Name
Lizenzkey: 123456
Gültigkeitsdatum: 99.99.9999
Alter Key: 789456
Lizenzhalter: Ihr Name
Lizenzkey: 123456
Gültigkeitsdatum: Keine
Alter Key: 789456
|
Sprich die Textblöcke sehen alle ähnlich aus, aber sie müssen nicht immer gleich sein. Es kann auch mal eine Zeile fehlen - halt so wie oben.
Ich muß also eine unbekannte Anzahl an Textblöcken einlesen um hinterher eine unbekannte Menge an Variablen mit Inhalten zu haben.
Nehmen wir an, daß ich den Softwarevertreiber dazu kriegen könnte zwei Zeilen in den Lieferschein einzufügen, so daß das so aussieht:
| Code: |
~~~ START ~~~
...
~~~ ENDE ~~~
|
und zwischen diesen Zeilen liegen also meine Textblöcke drinne, deren Anzahl ich nicht kenne. Die Textblöcke werden durch zwei Leerzeilen getrennt und der alte Key wird mit einer Leerzeile von den anderen Daten getrennt. Halt so ein Gewurschtel wie oben.
Hat jemand eine Ahnung, wie ich diese N Textblöcke in Variablen pressen kann. Also
Lizenzhalter1 =
Lizenzhalter2 =
Lizenzhalter3 =
LizenzhalterN =
LizenzhalterN darf dann auch ruhig leer sein, weil das kann ich dann wiederum abfangen, aber ich habe keine Ahnung, wie ich diese N:1 Relation hinkriege.
Vielen Dank im Vorraus  _________________ bis dahin
Martin |
|
| Nach oben |
|
 |
Thalon
Anmeldedatum: 25.10.2005 Beiträge: 1896 Wohnort: Österreich
|
Verfasst am: Sa Nov 18, 2006 8:30 pm Titel: |
|
|
| Zitat: | | Also, ich hätte da gerne mal ein Problem. | Magst meine haben?
Nein?
Ich dachte nur, weil du so gerne mal ein Problem hättest
Das Problem ist schon ganz gut beschrieben. Nur eine Info fehlt mir noch:
Gibt es NUR diese Keys in der Datei die du ausliest? (Das Start-Ende deutet ja auf etwas anderes hin).
Ansonsten würde ich einfach über alles Parsen und bei neuen Datensätzen den Index erhöhen.
| Code: | Datensatz = 0
Loop, Parse, File, `n, `r
{
if InStr(A_LoopField, "Lizenzhalter:")
{
Datensatz ++
Lizenzhalter%Datensatz% = %A_LoopField% ;Das hier durch deine Parse-Routine ersetzen
}
else if InStr(A_LoopField, "Lizenzkey")
Lizenzkey%Datensatz% = %A_LoopField%
....
....
} | Falls auch andere Sachen vorkommen in dem Dokument z.b. ein "else break"
Thalon _________________ Mein Motto: Hilfe zur Selbsthilfe!
Teildeutsche Hilfe (CHM)!! und Deutsche Online-Hilfe |
|
| Nach oben |
|
 |
macmewes
Anmeldedatum: 04.07.2006 Beiträge: 35
|
Verfasst am: So Nov 19, 2006 1:14 pm Titel: |
|
|
Hallo,
in der Tat handelt es sich nicht nur um einen Lieferschein.
Vielmehr sind die ersten N Seiten die Rechung und die letzten N Seiten der Lieferschein. Alles in einem Word-Dokument, welches ich mit STRG+C komplett in den Zwischenspeicher lade.
Ich hole mir über "loop,parse" schon sehr viele Sachen aus dem Dokument. Da kann ich jedoch auch sicher sein, daß diese Infos nur ein einziges Mal vorkommen oder ich nur die erste Entsprechung finden muß (Beispiel: Die eMail-Adresse an die vorab versandt wird).
Aber diese Textblöcke sind nicht leicht über das Parsen der Zwischenablage zu finden, weswegen ich in der Zwischenablage alles gesondert bearbeiten muß, was sich zwischen ~~~BEGIN~~~ und ~~~ENDE~~~ befindet.
Mein Pseudo-Code wäre also:
Wenn %A_Loopfield% = ~~~BEGIN~~~, dann lese N Textblöcke jeweils beginnend mit Lizenzhalter: und endend mit zwei Leerzeilen solange bis %A_Loopfield% = ~~~ENDE~~ ist.
Aber Dein Code hilft mir schon eine Menge weiter
Danke dafür. _________________ bis dahin
Martin |
|
| Nach oben |
|
 |
Thalon
Anmeldedatum: 25.10.2005 Beiträge: 1896 Wohnort: Österreich
|
Verfasst am: So Nov 19, 2006 2:02 pm Titel: |
|
|
@macmewes
Falls du dann noch Probleme hast (ich sehe nach wie vor keinen Grund für ~~~Begin~~~ und ~~~End~~~) kannst du mir ja per PN einmal ein zensiertes "echtes" Datenblatt schicken. Am Besten mit dem bereits vorhandenen Code.
Thalon _________________ Mein Motto: Hilfe zur Selbsthilfe!
Teildeutsche Hilfe (CHM)!! und Deutsche Online-Hilfe |
|
| Nach oben |
|
 |
macmewes
Anmeldedatum: 04.07.2006 Beiträge: 35
|
Verfasst am: Mi Nov 29, 2006 8:33 am Titel: |
|
|
So folgender Code ist nun gewachsen ...
| Code: |
Send, {CTRLDOWN}c{CTRLUP}
ClipWait
Datensatz = 0
Loop, parse, clipboard, `n, `r
{
Datensatz ++
Datensatz%Datensatz% = %A_LoopField%
IfInString, A_LoopField, Es wird keine CD geliefert
break
IfInString, A_LoopField, Zugang zur deutschen Version
break
}
MsgBox, Rechnungsdatum: %ReDate%`nVersendet an: %Mail%`nRechnungsnummer: %ReNu%`nKundennummer: %KuNu%`nAnzahl Datensätze: %Datensatz%
Anzahl = 0
Loop, %Datensatz%
{
Anzahl ++
Anzeige = Datensatz%Anzahl%
MsgBox, Durchlauf %Anzahl%: %Anzeige%
if (Anzahl = Datensatz)
break
}
|
... das Problem sollte ersichtlich sein, oder?
Ich habe nun entsprechend Datensätze im RAM rumliegen, aber wie kann ich mir diese später anzeigen lassen?
Datensatz ist gleich der Anzahl der Datensätze, also müßte ich nun ja nun auch irgendwas mit den Kameraden anfangen können und durch"loopen".
Was ich auch mache, ich erhalte im Test immer nur
Durchlauf 1: Datensatz1
Durchlauf 2: Datensatz2
Durchlauf 3: Datensatz3
Was ich aber brauche ist das Ergebnis von %Datensatz1%, %Datensatz2%, %Datensatz3% etcpp.
Vielen Dank für Die Hilfe vorab  _________________ bis dahin
Martin |
|
| Nach oben |
|
 |
hd0202
Anmeldedatum: 12.05.2006 Beiträge: 30
|
Verfasst am: Mi Nov 29, 2006 8:52 am Titel: Re: Textblock Relationen n:1 auflösen |
|
|
| Code: |
Anzeige := Datensatz%Anzahl%
|
bitte den roten Doppelpunkt beachten, es muss eine expression sein
Hubert |
|
| Nach oben |
|
 |
macmewes
Anmeldedatum: 04.07.2006 Beiträge: 35
|
Verfasst am: Mi Nov 29, 2006 9:05 am Titel: |
|
|
Asche auf mein Haupt - Danke  _________________ bis dahin
Martin |
|
| Nach oben |
|
 |
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|