Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: TMC am 25.09.04 - 01:17:43
-
Hi,
ich will in einem Windows-Dir was abfragen.
Syntax:
DATEINAMEYYYY.endung
DATEINAME = Dateiname ohne Endung
YYYY = Nummer, hier Typ String, Beginn normalerweise bei 0001 und wird nicht größer als 9999 (also 4 stellige ganze Zahl)
endung = Endung wie gif, doc, nsf
Was will ich machen:
Ich brauche in dem Verzeichnis die Datei mit DATEINAME und .endung, bei der YYYY den größten Wert hat.
Bsp:
In einem Verzeichnis liegen folgende Dateien:
auswertung0003.txt
auswertung0012.txt
urlaub17.jpg
auswertung0006.txt
auswertung0011.txt
Ich habe in Variablen:
DATEINAME$ = "auswertung"
endung$ = "txt"
Nun benötige ich in einer Variablen das Ergebnis: wäre hier im Beispiel 0013, da diese größer als 0003 oder 0006, 0011 oder 0012 ist.
Wie komme ich zu der 0013?
String-Operatoren etc. in LS sind mir bekannt (inkl. Dir$). Evtl. würde ein Loop, Start 9999, Schrittweite -1, gehen in Verbindung mit Dir$, erscheint mir aber als Overkill.
Gibt's vielleicht eine einfache(re) Möglichkeit?
*Edit*
Kleinen Logikfehler korrigiert: als Ergebnis brauche ich 0013 nicht 0012, da ja 0012 bereits existiert :-)
-
Fakt ist ja erstmal, dass Du sowieso das ganze Verzeichnis erstmal auslesen musst (IMHO).
Wenn dann die "Endung" fix ist (also immer die letzten 4 Ziffern wie in Deinem Beispiel), dann kannst Du diese "Endung" auslesen und nur dann zwischenspeichern, wenn sie grösser ist als die zuletzt gespeicherte.
Sind die "Endungen" in ihrer Länge variable, musst Du vorher "van hinten" prüfen, wie lange Du IsNumeric pro Character bekommst und so wieder die "Endung" zusammenflöhen.
Das aber erstmal nur so als Schnellschuss und - vielleicht - Denkanstoss. Vielleicht hilft Dir das schon weiter ?
A propos "weiter": Bei mir dann, wenn es wieder heller draussen ist ;-)
Gute Nacht,
Bernhard
-
Danke.
Fakt ist ja erstmal, dass Du sowieso das ganze Verzeichnis erstmal auslesen musst (IMHO).
Hab mir auch gedacht, dass es am geschicktesten wäre, die Dir-Inhalte (also die Dateinamen) als Array vorliegen zu haben.
Die Aufbereitung / Zerlegung der Strings selbst: soweit kein Problem für mich.
Nur: wie komme ich zu einem solchen String-Array, am besten ohne API? Ich konnte da LS-mäßig leider nichts finden....
Gute Nacht,
Matthias
-
Ich würde es ohne Array machen. Hier mein nach dem ersten Kaffee schnell-Schuss Ansatz (einiges ist hardcodiert, aber es soll ja nur das Prinzip verdeutlichen):
Dim pathName As String, fileName As String
pathName$ = "c:\test\*.*"
Dim file_praefix As String
Dim file_endung As String
Dim maxNr As Integer
Dim file_suffixNr As String
Dim file_suffixInt As Integer
file_praefix = "auswertung"
file_endung = ".txt"
maxNr = -1
fileName$ = Dir$(pathName$, 0)
Do While fileName$ <> ""
If (Instr( fileName$, file_praefix ) > 0) And (Right$( fileName$, Len( file_endung )) = file_endung ) Then
file_suffixNr = Strleft( Strright( fileName$, file_praefix ), file_endung )
If Isnumeric( file_suffixNr ) Then
file_suffixInt = Cint( file_suffixNr )
If file_suffixInt > maxNr Then
maxNr = file_suffixInt
End If
End If
End If
fileName$ = Dir$()
Loop
Msgbox "Die nächst höhere Zahl ist " & Cstr( maxNr + 1 )
Andreas
-
So nach dem 2. Kaffee sehe ich schon klarer 8)
Wenn es nur ein Präfix und eine Dateiendung ist (sonst müsstest Du im vorherigen Script noch ein paar If und Or einbauen) ist, geht es natürlich viel einfacher, in dem der Parameter für Dir$ bereits mit der Info und einer Wildcard gefüttert wird:
Dim pathName As String, fileName As String
Dim file_praefix As String
Dim file_endung As String
Dim maxNr As Integer
Dim file_suffixNr As String
Dim file_suffixInt As Integer
file_praefix = "auswertung"
file_endung = ".txt"
pathName$ = "c:\test\" & file_praefix & "*" & file_endung
maxNr = -1
fileName$ = Dir$(pathName$, 0)
Do While fileName$ <> ""
file_suffixNr = Strleft( Strright( fileName$, file_praefix ), file_endung )
If Isnumeric( file_suffixNr ) Then
file_suffixInt = Cint( file_suffixNr )
If file_suffixInt > maxNr Then
maxNr = file_suffixInt
End If
End If
fileName$ = Dir$()
Loop
Msgbox "Die nächst höhere Zahl ist " & Cstr( maxNr + 1 )
Andreas
-
Kaffee schnell-Schuss Ansatz
Prima, hast sogar mehr gecoded als ich erwartet hätte :D
Danke, so sollte es funktionieren - das Prinzip hab ich verstanden und klingt sehr sinnvoll!
Grüße,
Matthias
-
Bitte, gern geschehen :D
Ich würde meinen 2. Ansatz weiter verfolgen. Der erste ist unperformant.
Andreas