Deutsches AutoHotkey Homepage AutoHotkey Community
Wir helfen uns gegenseitig aus der Patsche
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Textblock Relationen n:1 auflösen

 
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Ich brauche Hilfe!
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
macmewes



Anmeldedatum: 04.07.2006
Beiträge: 35

BeitragVerfasst am: Sa Nov 18, 2006 6:15 pm    Titel: Textblock Relationen n:1 auflösen Antworten mit Zitat

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 Very Happy
_________________
bis dahin

Martin
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Thalon



Anmeldedatum: 25.10.2005
Beiträge: 1896
Wohnort: Österreich

BeitragVerfasst am: Sa Nov 18, 2006 8:30 pm    Titel: Antworten mit Zitat

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 Very Happy

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
macmewes



Anmeldedatum: 04.07.2006
Beiträge: 35

BeitragVerfasst am: So Nov 19, 2006 1:14 pm    Titel: Antworten mit Zitat

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 Smile

Danke dafür.
_________________
bis dahin

Martin
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Thalon



Anmeldedatum: 25.10.2005
Beiträge: 1896
Wohnort: Österreich

BeitragVerfasst am: So Nov 19, 2006 2:02 pm    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
macmewes



Anmeldedatum: 04.07.2006
Beiträge: 35

BeitragVerfasst am: Mi Nov 29, 2006 8:33 am    Titel: Antworten mit Zitat

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 Smile
_________________
bis dahin

Martin
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hd0202



Anmeldedatum: 12.05.2006
Beiträge: 30

BeitragVerfasst am: Mi Nov 29, 2006 8:52 am    Titel: Re: Textblock Relationen n:1 auflösen Antworten mit Zitat

Code:

Anzeige := Datensatz%Anzahl%


bitte den roten Doppelpunkt beachten, es muss eine expression sein

Hubert
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
macmewes



Anmeldedatum: 04.07.2006
Beiträge: 35

BeitragVerfasst am: Mi Nov 29, 2006 9:05 am    Titel: Antworten mit Zitat

Asche auf mein Haupt - Danke Very Happy
_________________
bis dahin

Martin
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Ich brauche Hilfe! Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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