Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: rasacani am 05.12.05 - 10:41:15

Titel: Dateiverarbeitung unter Script
Beitrag von: rasacani am 05.12.05 - 10:41:15
Hallo zusammen

Ich möchte in einem Agenten eine Datei lesen um neue Datensätze in der DB zu erzeugen.

Verzeichnisse:
        Datei          e:domino\data\transferdaten\reiselotus.dat
        DB              e:domino\data\ges\abt\reiseplaner.nsf

Script:
        decl.:          Type datensatz
                  sap_pnr As String*8
                  sap_name As String*40
                  sap_vname As String*40
                          End Type

        init.:      Sub Initialize
            Dim satz As datensatz
            Dim lese_ind As Integer
            lese_ind = 1   
            Open "e:domino\data\transferdaten\reiselotus.dat" _
                              For Random  Access Read Write As #1  Len = Len(satz)
            Get #1, lese_ind, satz
            Messagebox " Pers-Nummer:" & satz.sap_pnr & "#"   
            Close #1
        End Sub

Starte ich den Agenten so bekomme ich folgende Fehlermeldung:

         unable to open file


Findet das Script die Verbindung zur Datei nicht? Oder habe ich sost einen Denkfehler?

Wer kann helfen?






Titel: Re: Dateiverarbeitung unter Script
Beitrag von: Thomas Schulte am 05.12.05 - 10:55:11
Da fehlt ein Backslash
Code
Open "e:domino\data\transferdaten\reiselotus.dat" _
                              For Random  Access Read Write As #1  Len = Len(satz)

aber
Frage: Warum random wenn du doch nur Zeile für Zeile lesen willst? Input wäre da doch besser
Titel: Re: Dateiverarbeitung unter Script
Beitrag von: rasacani am 05.12.05 - 11:03:14
Hallo

In meinem Buch habe ich das so verstanden, daß ich bei Random direkt in verschiedene Felder lesen kann und die Positionierung für das Lesen des nächsten Satzes nicht berücksichtigen brauch.
Titel: Re: Dateiverarbeitung unter Script
Beitrag von: m3 am 05.12.05 - 11:06:17
Code
Open "e:domino\data\transferdaten\reiselotus.dat" _
                              For Random  Access Read Write As #1  Len = Len(satz)
Mach mal ein E:\domino\..... draus. ;)
Titel: Re: Dateiverarbeitung unter Script
Beitrag von: Thomas Schulte am 05.12.05 - 11:16:09
Hallo

In meinem Buch habe ich das so verstanden, daß ich bei Random direkt in verschiedene Felder lesen kann und die Positionierung für das Lesen des nächsten Satzes nicht berücksichtigen brauch.
Es hängt davon ab wie deine Datei aufgebaut ist.
Wenn die Zeilenorientiert ist mit einem CR/LF am Ende jeden Satzes, dann ist input die bessere Variante. Wenn du mit fixen Satzlängen arbeitest, dann random.
Titel: Re: Dateiverarbeitung unter Script
Beitrag von: rasacani am 05.12.05 - 11:19:18
Auch ein Open "E:\domino\data\transferdaten\reiselotus.dat" hilft nicht.

Vieleicht ist folgende Info noch hilfreich:

Wenn ich über den Explorer Netzlaufwerk verbinden gehe sehe ich die Datei. Über den Admi-Client seh ich sie nur wenn die Datei mit .nsf endet auch wenn alle Dateitypen angegeben werden.
Titel: Re: Dateiverarbeitung unter Script
Beitrag von: m3 am 05.12.05 - 11:23:23
Ich gehe mal davon aus, dass das Script auf dem Server läuft, oder?

Wenn "E" ein Netzlaufwerk ist, dann wird der User, unter dem der Domino-Server läuft, keine Rechte haben, auf dieses zuzugreifen (siehe auch Forumssuche).

Titel: Re: Dateiverarbeitung unter Script
Beitrag von: rasacani am 05.12.05 - 11:31:35
Die Datei ist wie folgt aufgebaut:

         Feste Satz / Feldlänge
         hinter jedem Satz CR/LF


Das Script teste ich noch aus den Aktionen heraus später soll es als periodischer Agent in der Nacht laufen.
Titel: Re: Dateiverarbeitung unter Script
Beitrag von: Thomas Schulte am 05.12.05 - 11:33:29
Und wieder ein Fall für "Bitte alle Informationen mitgeben".

M3 hat recht.
Und Forumssuche benutzen. Ähnliche Themen sind schon mindestens zwei Dutzend Mal besprochen worden.

Und was den Satzaufbau angeht. Dann Input verwenden. Das geht in diesem Fall in der Regel einfacher.
Titel: Re: Dateiverarbeitung unter Script
Beitrag von: flaite am 05.12.05 - 12:46:12
Versuch die Dinge einfach zu halten.
Wie Thomas schon richtig gesagt hat, ist input besser.
Du liest mit input eine Datei sequentiell ein. D.h. ein Zeichen (bzw. eine Zeile) nach der anderen.

Random Access brauchst du nur, wenn du zurückspringen mußt. D.h. du hast etwas in Zeile 11 eingelesen und willst danach etwas in Zeile 9 einlesen.
Random Access braucht man heute sehr selten, weil man dafür meist Datenbanken verschiedenster Art benutzt (z.B. Notes,Relationale Datenbank, xml-Datei).

Ein Vorteil von Datenbanken gegenüber Random Access Files ist in meinen unkorekten Worten, dass man das logische Auffinden, Reinstellen und Ändern der Daten von der physischen Struktur der tatsächlichen Datenspeicherung entkoppelt hat. Bei Random Access mußt du wissen, dass an der Stelle 88 die Date Nachname von Datensatz 4 anfängt (als Beispiel). Das ist auf die Dauer fehleranfällig und nervig.

Du willst aber scheinbar nur eine Datei von oben nach unten einlesen. Dafür reicht Input mehr als aus und mit R6 besser die Stream Klassen verwenden.
Den overhead von Random Access File kannst du dir aber echt sparen. Selbst wenn es funzt würde es deinen Nachfolger irritieren, wenn du für das sequentielle Einlesen einer Datei Random Access verwenden tätest.
Titel: Re: Dateiverarbeitung unter Script
Beitrag von: koehlerbv am 06.12.05 - 00:25:56
Ich würde hier auch dringend empfehlen, sich mit den Rechten auseinanderzusetzen, die ein Agent braucht, um auf Dateien ausserhalb des Notes-DataDirs zuzugreifen. Und wenn diese vielleicht noch auf einer anderen Kiste liegen ...

Meine Empfehlung:
- Breche mal Dein Problem in Einzelportionen herunter. Bisher scheitert ja schon der Zugriff auf das File, der access mode ist daher bisher uninteressant.
- Baue ein vernünftiges Errorhandling in deinen Code ein.

HTH,
Bernhard