Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Kadlec am 20.03.07 - 13:31:06

Titel: Suche Weg die letzte Zeile einer Datei zu finden
Beitrag von: Kadlec am 20.03.07 - 13:31:06
Hallo,

vor dem Import einer csv Datei muss ich prüfen ob in einer Spalte zwei Werte stehen.
Der Wert steht in der fünften Spalte.
Wie komme ich am schnellsten an die letzte Zeile (ca. 30 000 Datensätze)?

Gruss
Boris
Titel: Re: Suche Weg die letzte Zeile einer Datei zu finden
Beitrag von: iukhdh am 20.03.07 - 13:56:48
Kopiers in ein Excel Tabellenblatt und sortiere nach der 5. Spalte absteigend.
Titel: Re: Suche Weg die letzte Zeile einer Datei zu finden
Beitrag von: jo@chim am 20.03.07 - 16:13:00
Versuchs mal so:
Code
	Dim excelobj As Variant
	Dim xlsheet As Variant	
	'Die Nr. der Rückgabespalte:
	col= 5
                'Beliebige Datei (Semikolon getrennt):
	fileName$ = "c:\meinedatei.csv"
	Set excelobj= createObject("Excel.Application")	
	Call excelobj.Workbooks.OpenText(fileName$,,,,,,,True)
	Set xlsheet = excelobj.Workbooks(1).Worksheets(1)
	With xlsheet		
		lastrow= .Cells.SpecialCells(11).Row	
		lastval= .cells(lastrow,col).value
	End With
	Set excelobj=Nothing
	Msgbox lastval
Das Script gibt den letzten Wert in Spalte 5 der Semikolon getrennten Datei "c:\meinedatei.csv" zurück.
Titel: Re: Suche Weg die letzte Zeile einer Datei zu finden
Beitrag von: Kadlec am 20.03.07 - 16:39:27
Ich wollte das mit so wenig wie möglich Code erledigen und wenn möglich ohne Umwege (Excel).
Mein Ansatz war/ist die Datei komplett einzulesen
HoleFile = Input(Lof(i_FileNum), i_FileNum)   
Dann mit strrightback...an den Anfang der Zeile.

Nur wie erkenne ich den Anfang??
Titel: Re: Suche Weg die letzte Zeile einer Datei zu finden
Beitrag von: tks am 20.03.07 - 18:01:58
Ich würde es mal so versuchen:

Dim InputStr As String
fileNum% = Freefile()
   fileName$ = "d:\import1.txt"

Open fileName$ For Input As fileNum%

Do While Not Eof(fileNum%)
      Line Input #1,  InputStr$
      Loop

In InputStr$ sollte nun der Inhalt der letzten Zeile stehen.

Ist aus einem von meinen Importagenten rausgeklaut und ohne Anpassung o.ä.
Geht wahrscheinlich auch eleganter. Evt. kann das Line Input auch hinter den Loop

Titel: Re: Suche Weg die letzte Zeile einer Datei zu finden
Beitrag von: eknori am 20.03.07 - 18:34:40
Sub Click(Source As Button)
   Dim izFile As Integer
   Dim fileName As String
   Dim fileContents As String
   Dim arr As Variant
   izFile% = Freefile()
   fileName = "c:\tms.log"
   Open fileName$ For Input As izFile
   fileContents = Input$(Lof(izFile), izFile)
   arr = Split(FileContents,Chr$(13))
   Msgbox arr(Ubound(arr))
End Sub

mal so als Schnellschuss
Titel: Re: Suche Weg die letzte Zeile einer Datei zu finden
Beitrag von: flaite am 20.03.07 - 18:43:35
Ich würd vor dem Msgbox arr(Ubound(arr)) noch ein Close ranhängen.
[...]
Close
Msgbox arr(Ubound(arr))
end sub
Zitat
If you omit fileNumber, Close closes all open files.
Offene Filehandles können nämlich wirklich für Ärger sorgen.

Ich würd sogar einen Errorhandler einbauen und da noch einmal ein extra Close.
Titel: Re: Suche Weg die letzte Zeile einer Datei zu finden
Beitrag von: eknori am 20.03.07 - 18:47:51
sag ich doch, ist ein Schnellschuss und das Close habe ich schlichtweg vergessen.
Man kann die Datei auch as binary öffnen und mit Seek den EOF Pointer suchen. Dann muss man nur noch reverse von dieser Position aus bis zum Auftauchen des ersten CRLF suchen und hat den String der letzten Zeile; allerdings in umgekehrter Reihenfolge der Zeichen ...
Titel: Re: Suche Weg die letzte Zeile einer Datei zu finden
Beitrag von: Kadlec am 20.03.07 - 23:16:38
Also, mein Problem liegt hauptsächlich an dem aufsplitten der Datei.
Beim importieren bzw. zeilenweise einlesen wird jede Zeile korrekt abgearbeitet. Mit arr = Split(FileContents,Chr$(13)) wird aber die Datei nicht gesplittet, das Ende der Zeile wird also nicht mit Chr(13) abgegrenzt.
Hab auch schon Chr(10) & Chr(13) und einiges mehr versucht.

Merkwürdig!