Seite 1 von 1

PBOSL: FastTextSearch

Verfasst: 13.01.2006 12:12
von Karl
Hallo,

ich habe die PBOSL-Library geladen und die FastFile-Funktionen genutzt, um einen Report mit enthaltenen Bankverbindungen zu überprüfen, ob die vorhandenen Bankleitzahlen existieren. Dazu habe ich in einer anderen Datei (.blz) alle aktuellen BLZ zur Überprüfung abgespeichert. Die Idee ist folgende:

Nimm aus einer Bankverbindung die Bankleitzahl aus dem Report
Schau in der BLZ-Datei nach, ob existiert
wenn nicht: anzeigen

Hier wollte ich FastTextSearch verwenden. Allerdings meldet der Debugger "Invalid memory access", obwohl die erste Bankleitzahl eindeutig im BLZ-Verzeichnis existiert.

Code: Alles auswählen

BLZDatei = OpenFileRequester("Bitte wählen Sie die BLZ-Datei:", "", "BLZ-Datei (*.blz) | *.blz", 0)
If BLZDatei
  ENr = OpenFileRequester("Bitte wählen Sie die Abrufdatei:", "", "Abrufdatei (*.txt) | *.txt", 0)
  If ENr
    BLZZeilen = FastOpenTextFile(0, BLZDatei, Chr(13) + Chr(10))
    ENrZeilen = FastOpenTextFile(1, ENr, Chr(13) + Chr(10))
    ;Zeilen von ENr einlesen
    For i = 1 To ENrZeilen
      zeile = FastReadLine(1, i)
      blztest = RemoveString(Mid(zeile, 93, 10), " ") 
      ;BLZ isolieren und unnötige Zwischenräume löschen
      If Val(blztest) >= 10000000
        Debug blztest
        ;in der BLZ-Datei nachschauen und prüfen
        finde = FastTextSearch(0, blztest, 1)
        If finde <= 0
          MessageRequester("Nicht gefunden:", Left(zeile, 5))
        Else
          check = FastReadLine(0, finde)
          If Left(check, 8) <> blztest
            ;oder weitersuchen
            MessageRequester("Nicht gefunden:", Left(zeile, 5))
          EndIf
        EndIf
      EndIf
    Next
    FastCloseFile(1)
    FastCloseFile(0)
  EndIf
EndIf
End
Vielleicht haben die PBOSLer eine Idee. Eventuell gibt es Probleme mit dem Finden von Zahlen innerhalb von Textdateien.

Gruß Karl

Verfasst: 13.01.2006 14:19
von bobobo
hi Karl

Gruss nach Rostock


ich hab die lib ja nicht gemacht ..

als ersten muss man aber unterscheiden zwischen
fastopentextfile() und fastopenfile() und der Ordnung
halber mit den entsprechenden CloseBefehlen.


Es scheinbt so zu sein dass Du jedesmal vor dem Aufruf
FastTextSearch() die Datei mit FastOpenFile() öffnen
musst und nach der Suche wieder zumachen.

So in etwa

Code: Alles auswählen

BLZDatei = OpenFileRequester("Bitte wählen Sie die BLZ-Datei:", "", "BLZ-Datei (*.blz) | *.blz", 0) 
If BLZDatei 
  ENr = OpenFileRequester("Bitte wählen Sie die Abrufdatei:", "", "Abrufdatei (*.txt) | *.txt", 0) 
  If ENr 
    
    ENrZeilen = FastOpenTextFile(1, ENr, Chr(13) + Chr(10)) 
    ;Zeilen von ENr einlesen 
    For i = 1 To ENrZeilen 
      zeile = FastReadLine(1, i) 
      blztest = RemoveString(Mid(zeile, 93, 10), " ") 
      ;BLZ isolieren und unnötige Zwischenräume löschen 
      If Val(blztest) >= 10000000 
        Debug blztest 
        ;in der BLZ-Datei nachschauen und prüfen 
        BLZZeilen = FastOpenTextFile(0, BLZDatei, Chr(13) + Chr(10)) 
        finde = FastTextSearch(0, blztest, 1) 
        FastCloseTextFile(0)
        If finde <= 0 
          MessageRequester("Nicht gefunden:", Left(zeile, 5)) 
        Else 
          BLZZeilen = FastOpenTextFile(0, BLZDatei, Chr(13) + Chr(10)) 
          check = FastReadLine(0, finde) 
          FastCloseTextFile(0)
          If Left(check, 8) <> blztest 
            ;oder weitersuchen 
            MessageRequester("Nicht gefunden:", Left(zeile, 5)) 
          EndIf 
        EndIf 
      EndIf 
    Next 
    ; FastCloseFile(1)  <-- die Datei ist als FastTextFile geöffnet
    ;                                 und gehört auch so geschlossen
    FastCloseTextFile(1)
    ;FastCloseFile(0)   <-- 
  EndIf 
EndIf 
End

Verfasst: 16.01.2006 09:24
von Karl
Ja, du hast recht. In dieser Fassung funktioniert es.

Vielen Dank.

Gruß Karl