Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: CLI_Andreas_Schmidt am 05.12.06 - 13:53:29

Titel: Errorhandling
Beitrag von: CLI_Andreas_Schmidt am 05.12.06 - 13:53:29
Hi @Dev,

ich versuche mich gerade an der folgenden Funktion:

Open "c:\importordner\txt\" & fileName$ For Input As fileNum%

Gibt es hier auch ein vernünftiges Errorhandling ?  Was ist, wenn der file gar nicht da ist ? Ein isOpen(File) habe ich so nicht gefunden. Ich habe schon mit der Stream-Klasse gearbeitet. Aber die guckt leider nur auf (Verzeichnis leer oder nicht leer).

Aber die Frage hier heißt. Wie prüfe ich ab, ob eine bestimmte Datei tatsächlich da ist ?
Titel: Re: Errorhandling
Beitrag von: dirk_2909 am 05.12.06 - 14:00:16
mit
strFileName = Dir$( "c:\importordner\txt\" & fileName$ , 0 )
Kannst Du prüfen, ob die Datei vorhanden ist (strFileName <> "")
Titel: Re: Errorhandling
Beitrag von: ZaLudtske am 05.12.06 - 14:03:53
Hallo,

wenn auf Windows-Rechnern arbeitest kann du auch mit den FileSystemObject arbeiten. Dieses bietet viele und sehr bequeme Möglichkeiten auf das Vorhandensein von Dateien und Verzeichnissen zu prüfen.

Rainer
Titel: Re: Errorhandling
Beitrag von: Glombi am 05.12.06 - 14:05:45
@Rainer: Poste doch mal ein Beispiel dafür.

Andreas
Titel: Re: Errorhandling
Beitrag von: CLI_Andreas_Schmidt am 05.12.06 - 14:56:03
Ich habe den Code mal unten reingehängt. Was soll das Script tun ?

1. Sehe in Verzeichnis txt und nehme das erste file
2. Öffne es und lese den Dateinahmen aus (zeile 2) und suche dann in Verzeichnis doc nach der Datei.

Der Code funktioniert auch soweit. Ein Fehler ist jedoch noch drin, denn in Zeile X s.u. wird der erste File gezogen. In Zeile Y springt der Cursor bereits auf File 2 aus dem txt-Verzeichnis. Das soll aber nicht sein. Das Programm arbeitet also den ersten File nicht ab. Also ein Schleifenproblem.


---------------------->

Sub Initialize
   On Error Goto fehlermeldung
   
   
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim logdb As NotesDatabase
   Dim logdoc As NotesDocument
   Dim newdoc As NotesDocument
   Dim rtitem As NotesRichTextItem
   Dim strFileName As String
   
   Set db = s.CurrentDatabase
   
   Dim fileName As String
   Dim pathName As String
   pathName$ = "c:\ordner\txt\*.txt"
   
   fileName$ = Dir$(pathName$, 0) -------------------------> ZEILE X
   
   Dim txt As String
   Dim fileNum As Integer
   Dim counter As Integer
   Dim var() As String
   Dim getdocstringfile As String
   Dim getdocstringmail As String
   Dim getdocstringsubject As String
   Dim getdocstringbody As String
   Dim countvar As Integer
   

   Do     
      
      counter% = 0
      
      fileNum% = Freefile
      
      Open "c:\ordner\txt\" & fileName$ For Input As fileNum%
      
      fileName$ = Dir$() -------------------> Zeile Y
      
      Do While Not Eof(fileNum%)
         Line Input #fileNum%, txt$  ' Read each line of the file.
         Redim Preserve var(counter%)
         var(counter%) = txt$
         counter% = counter% + 1     ' Increment the line count.
      Loop
      
      Close fileNum%
      
      
      getdocstringmail = var(0)
      getdocstringfile = var(1)
      getdocstringsubject = var(2)
      getdocstringbody = var(3)
      
      
      strFileName = Dir$( "c:\ordner\doc\" & getdocstringfile , 0 )   

      If strFileName <> "" Then
         
         Open "c:\ordner\doc\" & getdocstringfile For Input As fileNum%
         Set newdoc = db.CreateDocument
         Call newDoc.ReplaceItemValue("FORM","Memo")
         Call newDoc.ReplaceItemValue("Sendto", getdocstringmail)
         Call newDoc.ReplaceItemValue("Subject", getdocstringsubject)
         
         Set rtitem = New NotesRichTextItem( newdoc, "Body" )
         Call rtitem.EmbedObject(EMBED_ATTACHMENT,"", "c:\ordner\doc\" & getdocstringfile )
         Call rtitem.AddNewline(2)
         Call rtitem.AppendText(getdocstringbody)         
         Call newdoc.Send(True)
         newdoc.Save True,False   
         countvar = 1
                  
      End If
      
   Loop Until fileName$ = ""
   
   Exit Sub
fehlermeldung:
   
   Print "Error" & Str(Err) & ": " & Error$
      
End Sub
Titel: Re: Errorhandling
Beitrag von: CLI_Andreas_Schmidt am 07.12.06 - 10:39:00
Der Fehler ist gefunden.

fileName$ = Dir$(pathName$, 0)
strFileName = Dir$( "c:\ordner\doc\" & getdocstringfile , 0 )   

Diese beiden Zeilen verwenden die Variable (Dir$). Der Fehler ist, dass die zweite Zeile den Inhalt aus Zeile 1 überschreibt. Man darf die Dir-Varibale nicht zum Suchen in zwei verschiedenen Verzeichnissen verwenden. Gefunden wie ? Debugger.
Titel: Re: Errorhandling
Beitrag von: animate am 07.12.06 - 10:51:57
@Rainer: Poste doch mal ein Beispiel dafür.

Andreas

Gedächtnisprotokoll:

dim fs as variant
set fs=CreateObject("Scripting.FileSystemObject")
if fs.FileExists("c:\file.txt")=true then
  msgbox("File exists")
else
   msgbox("File does not exist!")
end if
set fs=nothing
Titel: Re: Errorhandling
Beitrag von: CLI_Andreas_Schmidt am 07.12.06 - 11:26:51
Genau dieses Lösung habe ich dann auch verwendet.

:  )

Prima, Danke