Autor Thema: Array Frage fürs Wochenende  (Gelesen 3509 mal)

Offline LisaS

  • Senior Mitglied
  • ****
  • Beiträge: 429
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
    • [WCM4U]
Array Frage fürs Wochenende
« am: 19.09.03 - 15:43:32 »
Hallo Leute,
kurz vorm Wochenende noch ein kleines Problem.
Und zwar möchet ich Datensätze welche in einem Text-Feld hintereinander stehen per Script (UIWorkspace) in ein TXT-File schön untereinander schreiben. Den Teil mit dem Txt-File kriege ich wohl hin aber wie lese ich die Datensätze am besten aus. Ich dachte da an ein Array() welches ich mit den einzelnen Elementen fülle.
Die Daten im TextFeld sehen so aus:
01.02.2003|03.04.2003|Kundexy|Branchexy|Schulung;Dokumentation|fließtext;_
01.02.2003|03.04.2003|Kundexy|Branchexy|Schulung;Dokumentation|fließtext;usw
wieviel Datensätze in dem Feld drin sind ist immer unterschiedlich. Wie man sieht sind die einzelnen Elemente mit | getrennt und die einzelnen Datensätze mit ;
Jetzt hab ich mir schon gedacht ich mach mir einen

Type gtDataRec2
   StartDat As Variant
   EndeDat As Variant
   Firma As String
   Branche As String
   Funktion As String
   Task As String
End Type

und sage dann

Dim Array() As gtDataRec2

soweit so gut, aber wie sieht die Schleife zum befüllen der einzelnen Arrays aus?
Wäre  nett wenn Ihr mir mit ein Paar Code-Beispielen mal auf die Sprünge helft.
Vieleicht gibt es ja auch noch ne coolere Lösung?
Danke schonmal
Gruß
Hitcher


« Letzte Änderung: 22.09.03 - 12:43:13 von Hitcher »
Rechtschreibfehler sind beabsichtigt und dienen der allgemeinen Belustigung.
Server Windows , Domino 8.5.2, Workstation Win 7, Client 8.5.2, Designer 8.5.2 Browser IE 9, Firefox

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Array Frage fürs Wochenende
« Antwort #1 am: 19.09.03 - 15:57:50 »
So ganz seh' ich noch nicht durch, wo Dir der Schuh drückt, aber kann es sein, daß Deine "Datensätze" unterschiedlicher Struktur sind?

01.02.2003|03.04.2003|Kundexy|Branchexy|Schulung;Dokumentation|fließtext;01.02.2003|03.04.2003|Kundexy|Branchexy|Schulung;

Wenn ich die ";" als Record-Ende jetzt mal durch CR ersetze, ergibt sich:

01.02.2003|03.04.2003|Kundexy|Branchexy|Schulung;
Dokumentation|fließtext;
01.02.2003|03.04.2003|Kundexy|Branchexy|Schulung;

Sag' mal an !

Bernhard

Offline LisaS

  • Senior Mitglied
  • ****
  • Beiträge: 429
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
    • [WCM4U]
Re:Array Frage fürs Wochenende
« Antwort #2 am: 19.09.03 - 16:03:36 »
@Bernhard
Das ; hinter fließtext trennt die Datensätze
Die Datensätze sehen also so aus (mit CR ersetzt):
01.02.2003|03.04.2003|Kundexy|Branchexy|Schulung;Dokumentation;...|fließtext;
01.02.2003|03.04.2003|Kundexy|Branchexy|Schulung;Dokumentation;...|fließtext;
01.02.2003|03.04.2003|Kundexy|Branchexy|Schulung;Dokumentation;...|fließtext;
01.02.2003|03.04.2003|Kundexy|Branchexy|Schulung;Dokumentation;...|fließtext;
.
.
.

Gruß
Hitcher
Rechtschreibfehler sind beabsichtigt und dienen der allgemeinen Belustigung.
Server Windows , Domino 8.5.2, Workstation Win 7, Client 8.5.2, Designer 8.5.2 Browser IE 9, Firefox

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Array Frage fürs Wochenende
« Antwort #3 am: 19.09.03 - 16:40:11 »
Was ist denn nun Dein Datensatz-Trennzeichen? Wären es immer nur ";", dann würde ja eine Schleife genügen à la:
- Lese das Feld aus dem Dokument in eine String-Variable
- Leere alle Variablen in Type
- Lese den String in TempString, bis Feldtrennzeichen auftaucht - schiebe String in Type.Var1 (PLAUSIBILITÄTSPRÜFUNG!)
- Lese weiter, bis nächstes Feldtrennzeichen, schiebe String in Type.Var2 (PLAUSIBILITÄTSPRÜFUNG!)
- usw.
- Bei Erreichen des Trennzeichens für Record wird die letzte TypeVar gefüllt und das ganze mit Write #FileNo Type.Var1, Type.Var2 ... geschrieben.
Dann wieder Type leeren und weitermachen.
Und immer auf Plausibilität prüfen.
Hast Du kein eindeutiges Record-Ende-Kennzeichen, muß der Parser etwas komplizierter ausfallen ...

HTH,
Bernhard

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Array Frage fürs Wochenende
« Antwort #4 am: 19.09.03 - 22:16:57 »
... ist es richtig, daß das Semikolon im  Datensatz vorkommt und als Trennzeichen zu verstehen ist? - dann geht da was schief, dann müßtte man zumindest wissen das wievielte den Datensatz trennt...

... besser wäre natürlich eine CarriageReturn als Trenner der Datensätze, dann könntest du Zeilenweise vorgehen und mit @Expolde die einzelnen Bestandteile zwischen den Pipe's ermitteln...

ata
Grüßle Toni :)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Array Frage fürs Wochenende
« Antwort #5 am: 20.09.03 - 15:37:52 »
Hallo, Hitcher,

ist eigentlich sichergestellt, daß in "Fliesstext" das Semikolon nicht vorkommen kann? Amsonsten bist Du nämlich hoffnungslos verloren ...

Ansonsten kannst Du meinen Algorithmus-Vorschlag dahingehend erweitern, daß sowohl das Pipe-Symbol als auch das Semikolon als Feldtrennzeichen angesehen wird, und dann zählst Du die Felder - nach x Feldern siehst Du einen Rekord als ausgelesen aus und schreibst ihn ins CSV-File.

HTH,
Bernhard

Offline LisaS

  • Senior Mitglied
  • ****
  • Beiträge: 429
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
    • [WCM4U]
Re:Array Frage fürs Wochenende
« Antwort #6 am: 22.09.03 - 08:24:03 »
@Bernhard:
Im Fließtext kommt kein Semikolon vor, daß wurde vorher sicher gestellt.
@all:
Ich habe das Problem, daß ich hunderte von Dokumenten habe die leider schon mit diesen Datensätzen gefüllt sind.
01.02.2003|03.04.2003|Kundexy|Branchexy|Schulung;Dokumentation;...|Fließtext;
Die einzelnen Elemente eines Datensatzes habe ich farbig markiert.
Nur das Semikolon hinter dem Fließtext soll die einzelnen Datensätze von einander trennen. Die Semikolons im pinken Element sind zur Trennung  der einzelnen Begriffe innerhalb des Elementes.
Kann man nicht irgend wie die Pipes zählen und dann bis zum Semikolon und dann den nächsten Datensatz. Aber wie?
Gruß
Hitcher
Rechtschreibfehler sind beabsichtigt und dienen der allgemeinen Belustigung.
Server Windows , Domino 8.5.2, Workstation Win 7, Client 8.5.2, Designer 8.5.2 Browser IE 9, Firefox

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Array Frage fürs Wochenende
« Antwort #7 am: 22.09.03 - 08:35:18 »
... kannst du erreichen, daß hinter dem Semikolon ein Zeilenumbruch erfolgt, dann kannst du zeilenweise einlesen und mit @Explode die einzelnen Bestandteile voneinander trennen...

... ansonsten einen @Explode auf das Semikolon und dann jedes Element nochmals einen @Explode auf die Pipe...

... es sollten nur nicht mehr als 64K Zeilen sein, wegen der Indexgrenze bei Arrays...

ata
Grüßle Toni :)

Offline LisaS

  • Senior Mitglied
  • ****
  • Beiträge: 429
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
    • [WCM4U]
Re:Array Frage fürs Wochenende
« Antwort #8 am: 22.09.03 - 08:49:08 »
@ata:
Zeilenunbruch ist nicht drin, weil die Dokumente ja schon angelegt sind.
Dann werde ich mich mal mit @explode beschäftigen...

Gruß
Hitcher
Rechtschreibfehler sind beabsichtigt und dienen der allgemeinen Belustigung.
Server Windows , Domino 8.5.2, Workstation Win 7, Client 8.5.2, Designer 8.5.2 Browser IE 9, Firefox

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Array Frage fürs Wochenende
« Antwort #9 am: 22.09.03 - 10:05:05 »
@Explode bringt nix wegen fehlendem eineindeutigem Field Delimiter. Liest jemand eigentlich, was ich zur Problematik in diesem Thread schon geschrieben habe?

Bernhard

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Array Frage fürs Wochenende
« Antwort #10 am: 22.09.03 - 12:39:50 »
@Hitcher

... du hast weiter oben einen ziemlich langen Link - kannst du dem einen Umbruch geben - der Text liest sich in der Breite sehr schlecht - danke...

@koehlerbv
... ich habe gelesen, was du gepostet hattest. Nur ich will noch nicht so schnell passen - vielleicht gibt es einen Nenner, den man noch nicht kennt...


Unklar ist mir, ob in dem Bereich...

Schulung;Dokumentation;...

... mehrere Schulungen und Dokumentationen vorkommen können.
... gibt es Schlüsselwörter, an denen man eventuell einen Abschnitt erkennen kann...
... kann man die Datei auch nochmals neu in einer korrigierten Form bekommen?

ata
Grüßle Toni :)

Offline LisaS

  • Senior Mitglied
  • ****
  • Beiträge: 429
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
    • [WCM4U]
Re:Array Frage fürs Wochenende
« Antwort #11 am: 22.09.03 - 12:58:44 »
@all:
Ich habe jetzt ein neues Feld angelegt, welches ich mit @word wie folgt gefüllt habe.
die Semikolons habe ich mit / ersetzt, außer dem ist jetzt nach jedem Datensatz ein Zeilenumbruch.
01.02.2003|03.04.2003|Kundexy|Branchexy|Schulung/Dokumentation/...|fließtext;
01.02.2003|03.04.2003|Kundexy|Branchexy|Schulung/Dokumentation/...|fließtext;
01.02.2003|03.04.2003|Kundexy|Branchexy|Schulung/Dokumentation/...|fließtext;
01.02.2003|03.04.2003|Kundexy|Branchexy|Schulung/Dokumentation/...|fließtext;
.
.
.
Ich denke jetzt müßte es einfacher gehen.
Wie könnte jetzt der Code aussehen um die sechs Elemente in ein Array() zu bekommen?
Gruß
Hitcher
« Letzte Änderung: 22.09.03 - 12:59:23 von Hitcher »
Rechtschreibfehler sind beabsichtigt und dienen der allgemeinen Belustigung.
Server Windows , Domino 8.5.2, Workstation Win 7, Client 8.5.2, Designer 8.5.2 Browser IE 9, Firefox

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Array Frage fürs Wochenende
« Antwort #12 am: 22.09.03 - 14:22:14 »
... die Datei Zeilenweise einlesen...
... mit

vArray = Evaluate( {@Explode( sZeile ; "|" )})

... erhälst du die einzelnen Bausteine in einem Array, die du dann auswertest - das erste Element ist ein Datum, ebenso das zweite, das dritte ist der Kunde - also

For i = 0 to Ubound(vArray)
   If i = 0 Then
      Datum1 = vArray(0)
   Elseif i = 1 Then
      Datum2 = vArray(1)
   Elseif i = 1 Then
      Kunde = vArray(2)

' # usw.

   End If


Next

ata


Grüßle Toni :)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Array Frage fürs Wochenende
« Antwort #13 am: 22.09.03 - 16:31:11 »
ata, Hitcher will keine Textdatei lesen, sondern eine schreiben ...

Also, nochmal, was ich am 19. geschrieben habe:
- Lese das Feld aus dem Dokument in eine String-Variable
- Leere alle Variablen in Type
- Lese den String in TempString, bis Feldtrennzeichen auftaucht - schiebe String in Type.Var1 (PLAUSIBILITÄTSPRÜFUNG!)
- Lese weiter, bis nächstes Feldtrennzeichen, schiebe String in Type.Var2 (PLAUSIBILITÄTSPRÜFUNG!)
- usw.
- Bei Erreichen des Trennzeichens für Record (ist bei Dir jetzt ja wohl Chr$ (10) wird die letzte TypeVar gefüllt und das ganze mit Write #FileNo Type.Var1, Type.Var2 ... geschrieben.
- Und weiter wieder bei "Leere alle Variablen in Type
und so weiter ...

HTH,
Bernhard

Offline LisaS

  • Senior Mitglied
  • ****
  • Beiträge: 429
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
    • [WCM4U]
Re:Array Frage fürs Wochenende
« Antwort #14 am: 23.09.03 - 09:13:06 »
@ata:
Also, so sieht jetzt der code aus:
--------------------------------------------------------------------
Sub Click(Source As Button)
   Dim workspace As New NotesUIWorkspace
   Dim dsp As gtDataRec2
   Dim vArray As Variant
   Dim sZeile As String
   Dim vtxt As Variant
   Dim Item As Notesitem
   Dim i As Integer
   
   Set gUIDoc = workspace.CurrentDocument
   Set gDoc = gUIDoc.document
   Set gvRTitem = gDoc.GetFirstItem( "ObjCont" )
   Set Item = gDoc.GetFirstItem( "dspProjekte_3_1_2" )
   gsUnid = gDoc.UniversalID
   
          ' Pfade werden zugewiesen
   gsWorkDir="c:\"
   gsFileName1 = "projekte1.txt" 'Für den Export nach Word
   gsFileName2 = "projekte2.txt" 'Für die Berechnug/Anzeige in dem Dokument
     
   vtxt=gDoc.GetItemValue( "dspProjekte_3_1_2" )
   
   giFileNum1% = Freefile()
   Open gsWorkDir+gsFileName1 For Output As giFileNum1%
   giFileNum2% = Freefile()
   Open gsWorkDir+gsFileName2 For Output As giFileNum2%  
   Forall a In vtxt
      sZeile=a      
      vArray = Evaluate({@Explode( sZeile ; "|" )})
      For i = 0 To Ubound(vArray)
         If i = 0 Then
            dsp.SDat = vArray(0)
         Elseif i = 1 Then
            dsp.EDat = vArray(1)
         Elseif i = 2 Then
            dsp.Firma = vArray(2)
         Elseif i = 3 Then
            dsp.Branche = vArray(3)
         Elseif i = 4 Then
            dsp.Funktion = vArray(4)
         Elseif i = 5 Then
            dsp.Task = vArray(5)
         End If
      Next
      gsWritestr=dsp.SDat+"|"+dsp.EDat+"|"+dsp.Firma+"|"+dsp.Branche+"|"+dsp.Funktion+"|"+dsp.Task+"$"
      Print #giFileNum1% ,gsWritestr
      Write #giFileNum2% _                         ,dsp.SDat,dsp.EDat,dsp.Firma,dsp.Branche,dsp.Funktion,dsp.Task
     
   End Forall
   Close giFileNum1%
   Close giFileNum2%
   dspMask
   Attach
   Call ReOpen(gDoc)
End Sub
-----------------------------------------------------------------------------------
allerdings wird in vArray(0) nichts eingelesen.
Wenn ich das richtig verstanden habe, dann müßte,
'vArray = Evaluate({@Explode( sZeile ; "|" )})',
doch die Zeile innerhalb von vArray aufbröseln.

@Bernhard:
Der Code enstpricht doch ungefähr deinem Vorschlag, nur das mit der Plausibilitäts-Prüfung habe ich noch nicht ganz geschnallt.

Gruß
Hitcher
« Letzte Änderung: 23.09.03 - 09:20:28 von Hitcher »
Rechtschreibfehler sind beabsichtigt und dienen der allgemeinen Belustigung.
Server Windows , Domino 8.5.2, Workstation Win 7, Client 8.5.2, Designer 8.5.2 Browser IE 9, Firefox

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Array Frage fürs Wochenende
« Antwort #15 am: 23.09.03 - 16:58:43 »
Bevor wir an der falschen Stelle suchen, ein paar Fragen:
- Welchen Feldtyp hat dspProjekte_3_1_2 ?
- Sind Mehrfachwerte zugelassen ? Welches Trennzeichen ?
- Wie sieht das Feld in den Document Properties aus ?
- Wie sieht im Debugger vText nach der Zuweisung aus ? Paßt da noch alles ?

Und dann schau'n wir mal ;-)

Bernhard

Offline LisaS

  • Senior Mitglied
  • ****
  • Beiträge: 429
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
    • [WCM4U]
Re:Array Frage fürs Wochenende
« Antwort #16 am: 25.09.03 - 17:03:29 »
@Bernhard:
Sorry, daß ich jetzt erst antworte, aber imein Notebook ist kpl. abgeschmiert >:( >:(
Also
zu 1.: Feldtyp = Text
zu 2.: Mehrfachwerte - ja / Trennzeichen - Semikolon  Anzeigen mit neuer Zeile
zu 3.: "01.02.2003|03.04.2003|Kundexy|Branchexy|Schulung/Dokumentation/...|fließtext;"
zu 4.: siehe 3

Ok, an der Stelle nochmal Danke für Eure Hilfe.
Gruß
Hitcher
Rechtschreibfehler sind beabsichtigt und dienen der allgemeinen Belustigung.
Server Windows , Domino 8.5.2, Workstation Win 7, Client 8.5.2, Designer 8.5.2 Browser IE 9, Firefox

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz