Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: john doh am 02.07.08 - 15:17:35

Titel: 2 Probleme beim einlesen von CSV-Datei
Beitrag von: john doh am 02.07.08 - 15:17:35
Hallo,

ich mach es kurz. Ich habe eine Datenbank "test.nsf". Enthalten ist eine Maske "testmaske", mit den Textfeldern "kartennr", "betr", "status", "puffer". Der Agent heißt "okay", er wird über einen Button aufgerufen und das ist sein Code:

Sub Initialize
   Dim uiws As New NotesUIWorkspace
   Dim session As New notessession
   Dim db As notesdatabase
   Dim doc As notesdocument
   Dim view As NotesView
   Dim fileNum As Integer
   Dim fileName As Variant
   Dim InputStr As String
   Dim delimiter As String
   Dim FieldArray  As Variant
   Dim knrar As String
   Dim pufferar As String
   Dim statusrar As String
   
   Set db = session.currentdatabase
   Set view = db.GetView ("testview")
   fileNum% = Freefile()
   fileName = uiws.OpenFileDialog(True, "CSV-Datei auswählen", "CSV Files|*.CSV", "C:\")
   delimiter = ";"
   
   Open fileName(0) For Input As fileNum%
   Line Input #1,  InputStr$
   
   Do While Not Eof(fileNum%)
      Line Input #1,  InputStr$
      FieldArray = Split(InputStr$,delimiter)
      knrar = Replace(FieldArray(0) ,Chr(34),"")
      statusar = Replace(FieldArray(1) ,Chr(34),"")
      pufferar = Replace(FieldArray(2) ,Chr(34),"")
      
      If  Not Isempty(FieldArray) Then
         Set doc = view.GetDocumentByKey(knrar)
         If Not doc Is Nothing Then
            Call doc.ReplaceItemValue("status", statusar)
            Call doc.ReplaceItemValue("puffer", pufferar)
            Call doc.Save(True,True)
         End If
      End If
      
   Loop
   
   Close fileNum%
End Sub

Das ist der Inhalt der CSV-Datei:
"15";"Rechnungsbetrag";15,99
"15";"";
"15";"";5,99
"12";"";2,99
"12";"";
"12";"Rechnungsbetrag";12,99
"10";"";10,99
"10";"Rechnungsbetrag";20,99
"10";"";

Und so sieht die Ansicht "testview" nach Aufrufen des Agenten aus:
kartennr         betr                 status                      puffer
10                  11,99
11                  12,99
12                  13,99               Rechnungsbetrag      12,99
13                  14,99
14                  15,99
15                  16,99                                               5,99
16                  17,99
17                  18,99
18                  19,99
19                  20,99
19                  20,99

Soweit klappt alles, ich hab da "nur" noch zwei Probleme.
1. Momentan liest mir der Agent alle Zeilen der CSV ein. Ich möchte aber, dass er mir nur die Zeilen einliest, mit dem Wert "Rechnungsbetrag".
2. Momentan bin ich in der Ansicht "testview" darauf angewiesen, dass die Kartennr sortiert in der 1. Spalte stehen. Ich möchte aber, dass sie z.B. in der 4. Spalte unsortiert sind.

Hab gerade erst mit Lotus Script angefangen und brauche jetzt HILFE.

Danke!
Titel: Re: 2 Probleme beim einlesen von CSV-Datei
Beitrag von: m3 am 02.07.08 - 15:22:02
Wunderschöne Erklärung.

1) Und Du scheiterst jetzt woran? Wie lautet Deine konkrete Frage?

2) Was hat eine View mit dem Import der Daten zu tun? Das mit dem View geht nicht anders, wie Du der Designer-Hilfe zum Thema "GetDocumentByKey" entnehmen kannst.
Titel: Re: 2 Probleme beim einlesen von CSV-Datei
Beitrag von: Driri am 02.07.08 - 15:25:40
Zu 1)

Du müßtest vor dieser Zeile hier

Zitat
Set doc = view.GetDocumentByKey(knrar)

noch eine Prüfung einbauen, ob der statusar = "Rechnungsbetrag" ist. Also einfach noch eine If-Bedinung vorher einfügen.


Zu 2)

Die Frage habe ich nicht verstanden. Was meinst Du genau ?

Titel: Re: 2 Probleme beim einlesen von CSV-Datei
Beitrag von: koehlerbv am 02.07.08 - 15:26:50
Zu 1) Du möchtest Dir die LS-Function "Instr" anschauen.

Zu 2) Hier hat Martin nicht Recht - Du verwendest ja GetDocumentByKey (Achtung - hier fehlt der Parameter 'exactmatch'!!). Nur - wenn Du das verwendest, muss auch die View entsprechend sortiert sein.
Dein Problem 2) verstehe ich allerdings überhaupt nicht - mach' Dir eben eine zweite View nach Deinem Gusto.

Bernhard

PS: Ein ansprechbarer Name ist hier eigentlich Usus und bestimmt durchaus das Antwortverhalten der Hilfswilligen.
Titel: Re: 2 Probleme beim einlesen von CSV-Datei
Beitrag von: m3 am 02.07.08 - 15:32:51
Zu 2) Hier hat Martin nicht Recht - Du verwendest ja GetDocumentByKey (Achtung - hier fehlt der Parameter 'exactmatch'!!). Nur - wenn Du das verwendest, muss auch die View entsprechend sortiert sein.
Dein Problem 2) verstehe ich allerdings überhaupt nicht - mach' Dir eben eine zweite View nach Deinem Gusto.
Bernhard, da sagt die Designer-Hilfe aber etwas anderes:

Zitat
GetDocumentByKey finds a document based on its column values within a view. You create an array of keys, where each key corresponds to a value in a sorted column in the view.
...
For the GetAllDocumentsByKey method to work, you must have at least one sorted column for each key.
Die Kartennummer muss also in der ersten sortierten Spalte stehen (auch wenn das die vierte Spalte der View ist).
Titel: Re: 2 Probleme beim einlesen von CSV-Datei
Beitrag von: koehlerbv am 02.07.08 - 15:35:24
Das ist schon klar, Martin - aber er will das ja dann unsortiert haben. Aber das hast Du ja schon bestätigt.

Bernhard
Titel: Re: 2 Probleme beim einlesen von CSV-Datei
Beitrag von: john doh am 02.07.08 - 15:53:59
Danke für die schnellen Antworten.

zu 1.
Wenn der Agent so ausgeführt wird, schreibt er mir doch die komplette CSV in ein Array. Richtig? Ich möchte aber, dass er mir nur die Zeilen reinschreibt mit dem Wert "Rechnungsbetrag". Wie bekomme ich das hin?

Zu 2.
Fieldarray(0) wird doch durch den Befehl "GetDocumentByKey" mit der ersten sortieren Spalte verglichen. Richtig? Welcher Befehl veranlasst Fieldarray(0) sich mit der z.B. 4. Spalte zu vergleichen?

Habt etwas Nachsicht mit mir, ich bringe mir Lotus Script seid 1 1/2 Wochen selber bei.
Titel: Re: 2 Probleme beim einlesen von CSV-Datei
Beitrag von: koehlerbv am 02.07.08 - 15:57:03
Zu 1) Liest Du auch, was man Dir antwortet?

2) Es bleibt bei der Methode GetDocumentByKey und der Tatsache, dass der Wert in der ersten sortierten Spalte gesucht wird. Egal, ob das die erste oder die vierte ist.

Und der Name fehlt immer noch. Mit john doh mag ich mich nicht unterhalten.

Bernhard
Titel: Re: 2 Probleme beim einlesen von CSV-Datei
Beitrag von: WernerMo am 02.07.08 - 16:05:33
Hallo

@Bernhard, da muss ich Dich leider korrigieren:
Und der Name fehlt immer noch. Mit john doh mag ich mich nicht unterhalten.

Mathias hat (wie von Dir empfohlen) seinen Vornamen mit "MfG" in den Footer.


@Matthias, dann musst Du eben die Ansicht für Deine Zwecke umbauen.

Gruß Werner
Titel: Re: 2 Probleme beim einlesen von CSV-Datei
Beitrag von: john doh am 02.07.08 - 16:17:31
@Bernhard

Ja, ich lese mir alle Antworten durch, nur wie ich schon schrieb, bin ich totaler Anfänger was Script angeht. Und um ehrlich zu sein, weiß ich nicht wirklich, wie  ich die Vorschläge zu meinem ersten Problem einbinden soll.
Das zweite Problem ist gelöst, vielen Dank an alle, hatte das mit der ersten Spalte falsch verstanden.

Knicks
Matthias
Titel: Re: 2 Probleme beim einlesen von CSV-Datei
Beitrag von: koehlerbv am 02.07.08 - 16:20:40
Die Logik musst Du schon selbst einbringen, Matthias, aber was Du brauchst, ist ein

If Instr (InputStr$, "Rechnungsbetrag") > 0 Then

HTH,
Bernhard
Titel: Re: 2 Probleme beim einlesen von CSV-Datei
Beitrag von: john doh am 03.07.08 - 09:31:06
ES FUNKTIONIERT (nicht das ich jemals dran gezweifelt hätte).  ;D

Danke für die schnelle Hilfe!
Danke für die Aufmerksamkeit!
Danke für die Geduld!
Danke für das herzliche Aufnehmen im Forum!  ;D
Danke für die Blumen!

Aber jetzt mal ernsthaft, vielen Dank an alle, Ihr habt mir sehr weitergeholfen.

Alle Anforderungen an den Agenten sind erfüllt und mein Chef ist zufrieden.

Entschuldigt vielmals meinen schlechten Start im Forum.

Matthias
Titel: Re: 2 Probleme beim einlesen von CSV-Datei
Beitrag von: koehlerbv am 03.07.08 - 16:41:05
Entschuldigt vielmals meinen schlechten Start im Forum.

Hallo Matthias,

dafür gibt es überhaupt keinen Grund - alles passt doch (incl. Deiner dankenswerten Rückmerldung).

In diesem Sinne: Gerne wieder (wenn wir helfen können).

Bernhard