Export Agent mit unterschiedlichen Dateinamen

  • Hallo Leute,


    ich habe einen Export Agent laufen, der soweit auch funktioniert.
    Der Agent läuft einmal am Tag um 22 Uhr.


    Der Agent soll jetzt bei jedem Lauf eine hochzählende Datei-Endung erzeugen. Weil im Moment überschreibt er die alte Datei einfach.


    Also beim ersten Lauf = "test_1.dat" dann beim zweiten Lauf = "test_2.dat" usw.


    Hab schon überlegt wie ich das realisieren könnte, nur leider is mir nix eingefallen.


    Habt ihr eine Idee?


    Dank euch



    Der jetzige Agent sieht so aus:



    Sub Initialize

    Const textfile$ = "/test/test.dat"



    Const fldDelim% = 59 '
    Dim session As NotesSession
    Dim db As NotesDatabase
    Dim view As NotesView
    Dim doc As NotesDocument
    Dim lastCol As Integer
    Dim colCnt As Integer
    Dim txt As String
    Dim fileNum As Integer
    Dim docCnt As Integer '

    Set session = New NotesSession
    Set db = session.CurrentDatabase

    Set view = db.GetView("test")

    Call view.Refresh
    view.AutoUpdate = False


    lastCol = Ubound(view.Columns)
    colCnt = 0
    txt = ""
    fileNum% = Freefile()

    If Dir$(textfile, 0) <> "" Then
    Kill textfile
    End If

    Open textfile For Output As fileNum%

    Set doc = view.GetFirstDocument
    docCnt = 0
    While Not (doc Is Nothing)
    txt = ""
    For colCnt = 0 To lastCol Step 1

    txt = txt + doc.ColumnValues(colCnt)
    If (colCnt <> lastCol) Then

    txt = txt + Chr$(59)
    ' Semikolon

    End If
    Next
    Print #fileNum%, txt
    docCnt = docCnt + 1

    Set doc = view.GetNextDocument(doc)

    Wend


    Close fileNum%

    End Sub

  • Ist doch in deinem Script schon drin: Dir$.
    Damit prüfst du ob sie da ist und dann setzt du halt einfach Dateiname & "_" & cstr(Zahl) & Endung den Namen jeweils zusammen und das eben so lange bis kein Treffer mehr beim Dir da ist

  • Hey hab jetzt folgenden Agent zusammengebaut, nur leider überschreibt dieser mir immer die test_0.dat File, auch wenn diese schon existiert.


    habt ihr vielleicht eine idee?


    Sub Initialize

    Const fldDelim% = 59 '
    Dim session As NotesSession
    Dim db As NotesDatabase
    Dim view As NotesView
    Dim doc As NotesDocument
    Dim lastCol As Integer
    Dim colCnt As Integer
    Dim fileCnt As Integer
    Dim txt As String
    Dim fileNum As Integer
    Dim docCnt As Integer '
    Dim textfile As String
    Dim textfile1 As String
    Dim textfile2 As String

    Set session = New NotesSession
    Set db = session.CurrentDatabase

    Set view = db.GetView("test")

    Call view.Refresh 'Ansicht aktualisieren, damit der aktuellste Stand exportiert wird
    view.AutoUpdate = False 'damit keine eventuellen Aktualisierungen dazwischenfunken

    lastCol = Ubound(view.Columns)
    colCnt = 0
    txt = ""
    fileNum% = Freefile()
    fileCnt = 0

    textfile = "C:\test\test_0.dat"
    textfile1= "C:\test\test_"
    textfile2= ".dat"

    If Dir$(textfile, 0) = "" Then

    Open textfile For Output As fileNum%

    Set doc = view.GetFirstDocument
    docCnt = 0
    While Not (doc Is Nothing)
    txt = ""
    For colCnt = 0 To lastCol Step 1
    txt = txt + doc.ColumnValues(colCnt)
    If (colCnt <> lastCol) Then
    txt = txt + Chr$(59)
    ' Semikolon
    End If
    Next
    Print #fileNum%, txt
    docCnt = docCnt + 1
    Set doc = view.GetNextDocument(doc)
    Wend

    Close fileNum%

    Else

    Do While Dir$( textfile1 & fileCnt & textfile2,0) <> Dir$(textfile,0)
    fileCnt = fileCnt+1
    Loop

    Open textfile1 & fileCnt & textfile2 For Output As fileNum%

    Set doc = view.GetFirstDocument
    docCnt = 0
    While Not (doc Is Nothing)
    txt = ""
    For colCnt = 0 To lastCol Step 1
    txt = txt + doc.ColumnValues(colCnt)
    If (colCnt <> lastCol) Then
    txt = txt + Chr$(59)
    ' Semikolon
    End If
    Next
    Print #fileNum%, txt
    docCnt = docCnt + 1
    Set doc = view.GetNextDocument(doc)
    Wend

    Close fileNum%

    End If

    End Sub

  • Unter anderem wohl deswegen weil du versuchst eine Zahl mit einem String zu mixen.


    Schau dir nochmal mein vorheriges Posting an, da steht es sogar schon richtig drin wie es gemacht werden muss

  • so der erste teil der if abfrage funktioniert jetzt aber ich hab irgend ein problem mit der schleife. der agent holt sich immer die schon existierende file und erstellt diese neu. ich bin in der script spache noch nicht so fit.


    könntet ihr mir dabei nochmal unter die arme greifen?


    lastCol = Ubound(view.Columns)
    colCnt = 0
    txt = ""
    fileNum% = Freefile()
    fileCnt = 0

    textfile = "C:\test\test_" & Cstr(fileCnt) & ".dat"
    textfile1= "C:\test\test_"
    textfile2= ".dat"

    If Dir$(textfile) = "" Then

    Open textfile For Output As fileNum%

    Set doc = view.GetFirstDocument
    docCnt = 0
    While Not (doc Is Nothing)
    txt = ""
    For colCnt = 0 To lastCol Step 1
    txt = txt + doc.ColumnValues(colCnt)
    If (colCnt <> lastCol) Then
    txt = txt + Chr$(59)
    ' Semikolon
    End If
    Next
    Print #fileNum%, txt
    docCnt = docCnt + 1
    Set doc = view.GetNextDocument(doc)
    Wend

    Close fileNum%

    Else

    Do While Dir$(textfile1 & Cstr(fileCnt) & textfile2) <> textfile
    fileCnt = fileCnt+1

    Open textfile For Output As fileNum%

    Set doc = view.GetFirstDocument
    docCnt = 0
    While Not (doc Is Nothing)
    txt = ""
    For colCnt = 0 To lastCol Step 1
    txt = txt + doc.ColumnValues(colCnt)
    If (colCnt <> lastCol) Then
    txt = txt + Chr$(59)
    ' Semikolon
    End If
    Next
    Print #fileNum%, txt
    docCnt = docCnt + 1
    Set doc = view.GetNextDocument(doc)
    Wend

    Close fileNum%

    Loop
    End If

    End Sub

  • Du zählst zwar deinen Dateinamen hoch, aber öffnen und beschreiben tust du grundsätzlich die Version mit 0 (Variable textfile).


    Du solltest dir das vielleicht erst mal unabhängig von Script vom Ablauf her genau überlegen bevor du es in Script versuchst umzusetzen

  • also irgendwie komm ich nicht weiter, wenn ich die Abbruch Bedingung in der Do Until Schleife so setze wie unten im script, erzeugt er mir eine neue File nach der anderen, was ja auch verständlich ist. setze ich die Bedingung auf


    Do Until textfile1 & Cstr(fileCnt) & textfile2 > Dir$(textfile)


    passiert nichts, was ich nicht ganz verstehe. hab ich irgendwo einen denkfehler? die schleife sollte so doch solang laufen bis der erste teil größer ist wie die textfile?



    lastCol = Ubound(view.Columns)
    colCnt = 0
    txt = ""
    fileNum% = Freefile()
    fileCnt = 0

    textfile = "C:\test\test_" & Cstr(fileCnt) & ".dat"
    textfile1= "C:\test\test_"
    textfile2= ".dat"

    If Dir$(textfile) = "" Then

    Open textfile For Output As fileNum%

    Set doc = view.GetFirstDocument
    docCnt = 0
    While Not (doc Is Nothing)
    txt = ""
    For colCnt = 0 To lastCol Step 1
    txt = txt + doc.ColumnValues(colCnt)
    If (colCnt <> lastCol) Then
    txt = txt + Chr$(59)
    ' Semikolon
    End If
    Next
    Print #fileNum%, txt
    docCnt = docCnt + 1
    Set doc = view.GetNextDocument(doc)
    Wend

    Close fileNum%

    Else

    Do Until textfile1 & Cstr(fileCnt) & textfile2 < Dir$(textfile)
    fileCnt = fileCnt+1

    Open textfile1 & Cstr(fileCnt) & textfile2 For Output As fileNum%
    Set doc = view.GetFirstDocument
    docCnt = 0
    While Not (doc Is Nothing)
    txt = ""
    For colCnt = 0 To lastCol Step 1
    txt = txt + doc.ColumnValues(colCnt)
    If (colCnt <> lastCol) Then
    txt = txt + Chr$(59)
    ' Semikolon
    End If
    Next
    Print #fileNum%, txt
    docCnt = docCnt + 1
    Set doc = view.GetNextDocument(doc)
    Wend

    Close fileNum%

    Loop
    End If
    Messagebox "OK", MB_OK ,"Continiune?"
    End Sub

  • Und wann bitte ist test_0.dat größer test_1.dat ?


    Richtig niemals, weil es keine Zahlenwerte sondern Texte sind. Und die können nur gleich oder ungleich sin, aber niemals größer.


    Bitte beschöftige dich erst mal mit den Grundprinzipien des Programmierens, sonst wirst du nie weiterkommen

  • Ich hab den Thread/Code jetzt nicht ganz durchgelesen, eventuell daher irgendwas nicht beachtet.
    Aber ist es nicht so, dass man String doch auf kleiner/größer vergleichen kann? Meines Wissens nach wird der String in ASCII Code umgesetzt und dann entsprechend verglichen.


    Richtig ist zwar, dass "test_0.dat" niemals > "test_1.dat" ist, aber "test_1.dat" > "test_0.dat" gilt und nicht nur "test_1.dat" <> "test_0.dat" gilt.

  • Ich verstehe nicht so recht, warum du nicht simpel und einfach die Files im Stile von test_YYYYMMDD.dat erzeugst. Da kann es keine Verwirrungen geben...

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl