Import von Datei per Agent

  • Ich versuche per Agent eine Backupdatei in ein Feld zu schreiben.
    Klappt auch soweit ganz gut, jedoch werden im Dokument nur die ersten ca. 600 Zeilen importiert.


    ##################
    Open "c:\backup.log" For Input As fileNum%
    Do While Not Eof(fileNum%)
    Line Input #fileNum, txt$
    Print counter
    imput = imput+Chr(13)+"Zeile: "+Str(counter)+" - "+txt$
    counter = counter + 1
    Loop
    Print imput
    Call doimporttxt(imput)


    ##################
    Function DoImportTXT(impvar As String)
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Set db = session.CurrentDatabase
    Set doc = New NotesDocument( db )
    doc.Form = "Imp22"
    doc.imptxt = impvar
    Call doc.Save( False, False )
    End Function


    ##################
    Ergebnis Dokumenteneigenschaft
    Feldname: Imptxt
    Datentyp: Text
    Datenlänge: 31431 Byte
    Seq.-Num.: 1
    Doppelte Eintrags-ID: 0
    Feld-Flags: SUMMARY


    Was mache ich falsch?

  • Ich schaetze, die Kapazitaet des Feldes imptext ist erreicht. Versuch mal nach ca. 500 Eintraegen ein neues Feld fuer den Import zu fuellen.

    • Offizieller Beitrag

    sieht mir auch nach einer 32 K-Grenze aus. Falls Du nicht mit mehreren Feldern arbeiten willst, könntest Du den Text in ein RT-Feld schreiben.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Auch das RT-Feld nimmt nur 611 Zeilen auf. Komischerweise ist der Datentyp nach dem Import auf Text gesprungen.
    ############
    Feldname: imp22
    Datentyp: Text
    Datenlänge: 31431 Byte
    Seq.-Num.: 1
    Doppelte Eintrags-ID: 0
    Feld-Flags: SUMMARY


    Definiert ist das Feld in der Maske definitiv als RT-Feld


    Gibt es vielleicht eine Feldgrößenbeschränkung, die nur bei Agenten greift?

    • Offizieller Beitrag

    Wie übergibst Du den Text an Dein Feld?


    Verwende mal NotesRichTextItem.AppendText und NotesRichTextItem.NewLine.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Wenn du ein Feld nicht explizit im Script vom Typ her definierst versucht er automatisch den Typ anhand der zugewiesenen Daten zu setzen. Und das ist bei dir halt Text.
    Wie Diali schon sagte du musst dieses Feld explizit als RichTextFeld definieren und dann mit den RT-Methoden den Text anhängen

  • Danke taurec und diali, das klappt.


    Nun habe ich noch ein Problem. Beim Einlesen muss ich den Import von ASCII in ANSI wandeln. Mache ich das an einer falschen Stelle, oder warum klappt mein Call Ascii2Ansi nicht?
    Binde ich den Aufruf mit ein, ist das RT-Feld im Importdokument leer:
    ############
    Sub Initialize
    Dim imput As String
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Set db = session.CurrentDatabase
    Set doc = New NotesDocument( db )
    Dim rtitem As New NotesRichTextItem(doc, "imp22")
    fileNum% = Freefile()
    Print Freefile()
    counter = 0
    Open "c:\backup.log" For Input As fileNum%
    Do While Not Eof(fileNum%)
    doc.Form = "Imp22"
    ' Einlesen der Zeile
    Line Input #fileNum, txt$
    Print "Einlesen von Zeile: "+counter
    ' ANSI-Format vergeben
    Call Ascii2Ansi(txt$)
    ' Neuen Eintrag ins Dokument
    Call rtitem.AddNewLine(1)
    Call rtitem.AppendText(txt$)
    counter = counter + 1
    Loop
    Print "Einlesen beendet, gelesene Zeilen: "+counter
    Call doc.Save( False, False )
    End Sub
    ############
    Function Ascii2Ansi(inputString As String) As String
    Dim inputChars(7) As String
    Dim outputChars(7) As String
    'ASCII Codes
    inputChars(1) = Chr(142)
    inputChars(2) = Chr(153)
    inputChars(3) = Chr(154)
    inputChars(4) = Chr(132)
    inputChars(5) = Chr(148)
    inputChars(6) = Chr(129)
    inputChars(7) = Chr(225)
    'ANSI Chars/Codes
    outputChars(1) = "Ä"
    outputChars(2) = "Ö"
    outputChars(3) = "Ü"
    outputChars(4) = "ä"
    outputChars(5) = "ö"
    outputChars(6) = "ü"
    outputChars(7) = "ß"
    Dim i,x As Integer
    Dim NewSign As String
    Dim dummy1, dummy2 As String
    For i = Lbound(inputChars) To Ubound(inputChars) x = Instr(1,inputString,inputChars(i))
    While x <> 0
    dummy1 = Left$(inputString, x - 1)
    dummy2 = Right$(inputString, Len(inputString)-x)
    inputString = dummy1 & outputChars(i)&dummy2
    x = Instr(1,inputString,inputChars(i))
    Wend
    Next
    Ascii2Ansi = inputString
    End Function
    ############

  • Könnte es vielleicht daran liegen:


    Deine Funktion liefert ein Ergebnis als String:
    Function Ascii2Ansi(inputString As String) As String


    Das Ergebnis hast Du hinterher in Ascii2Ansi:
    Ascii2Ansi = inputString


    Und so rufst Du die Funtion auf:
    Call Ascii2Ansi(txt$)


    Damit wird aber das Ergebnis der Funktion nicht an den Aufruf zurückübergeben.
    Probiere es mal mit txt$= Ascii2Ansi(txt$)


    Vielleicht liegt da der Hund begraben.


    Gruß


    Der Ozzy

  • da war jemand schneller als ich.


    DerOzzy
    Ist auch meine Vermutung!!!



    Als Tipp!! :)


    Forall i In inputChars
    pos = Instr( txt, i )
    ........


    ........
    End Forall


    und die Schleife sieht schon übersichtlicher aus. ;)


    Gruß
    Ralph

  • Zitat


    yannea schrieb:
    Habe entdeckt, dass irgendwie die Schleife einen leeren inputString erzeugt.
    Ich seh den Fehler nicht.


    Dein Problem liegt wohl darin, daß du Deine Arrays auf Basis 0 deklariert hast, aber erst ab Position 1 belegst.


    Da Du an der Stelle 0 keinen Character definiert hast, findet er diesen jedesmal - bis dein Inputstring leer ist.


    Lösung:


    Code beibehalten, aber "Option Base 1" unter Options ergänzen.


    Oder Arrays anders deklarieren:


    Dim inputChars(6) As String
    Dim outputChars(6) As String
    'ASCII Codes
    inputChars(0) = Chr(142)
    inputChars(1) = Chr(153)
    inputChars(2) = Chr(154)
    inputChars(3) = Chr(132)
    inputChars(4) = Chr(148)
    inputChars(5) = Chr(129)
    inputChars(6) = Chr(225)
    'ANSI Chars/Codes
    outputChars(0) = "Ä"
    outputChars(1) = "Ö"
    outputChars(2) = "Ü"
    outputChars(3) = "ä"
    outputChars(4) = "ö"
    outputChars(5) = "ü"
    outputChars(6) = "ß"


    Das sollte es tun.


    Gruß


    Der Ozzy