dani
Goto Top

VBS - Datei auswählen

Guten Abend zusammen,

ich bin auf der Suche nach dem Dateidialog. Sprich das Script läuft, öffnet den Dialog und ich kann dann eine Datei auswählen. Danach soll der Inhalt zeilenweise ausgelesen werden und in eine Variable speichern.

Kl. Sache am Rande: Wie kann ich ein String splitten?! Das Trennzeichen wäre z.B. ein Punkt. Der String davor bzw. danach sollte in eine extra Variable gespeichert werden.

Schon mal vielen Dank an die Programmierjungs / mädels. *gg*


Grüße
Dani

Content-ID: 55751

Url: https://administrator.de/contentid/55751

Ausgedruckt am: 19.11.2024 um 19:11 Uhr

gemini
gemini 03.04.2007 um 20:23:21 Uhr
Goto Top
Hi,

Kl. Sache am Rande: Wie kann ich ein String splitten?! Das Trennzeichen wäre z.B.
ein Punkt. Der String davor bzw. danach sollte in eine extra Variable gespeichert werden.

strString = "irgendwas.und.nochwas"  
arrString = Split(strString,".", -1, 1)  
MsgBox arrString(0) ' gibt 'irgendwas' aus  
MsgBox arrString(1) ' gibt 'und' aus  
MsgBox arrString(2) ' gibt 'nochwas' aus  

HTH,
gemini
bastla
bastla 03.04.2007 um 20:24:51 Uhr
Goto Top
Hallo Dani!

Nur kurz: Für die "Randsache" könntest Du die "Split"-Funktion verwenden:
strTestText = "Ein.String.mit.vielen.Punkten."  
arrTeile = Split(strTestText, ".")  
WScript.Echo CStr(UBound(arrTeile) + 1) & " Teile:"  
For i = 0 To UBound(arrTeile)
	WScript.Echo arrTeile(i)
Next
Zur Beachtung: Hinter dem letzten Punkt wird hier noch ein leerer String gefunden.

Grüße
bastla

[Edit] @gemini: Aber ich hab' mehr Punkte ... face-wink [/Edit]
Dani
Dani 03.04.2007 um 20:29:23 Uhr
Goto Top
G' Abend ihr zwei,
vielen Dank! Somit wäre das kl. Problem gelöst. Aber das Große wäre wichtiger. *gg*

Ich habe hinbekommen das ich einen Ornder auswählen kann, aber das möchte ich nicht!!
Ordnerauswahl:
Set Appshell = CreateObject("Shell.Application")  

if Sendenan.Count=0 then
	Set AppFolder = Appshell.BrowseForFolder(0, "",  &H0001, 17)  
	Ordner = AppFolder.ParentFolder.ParseName(AppFolder.Title).Path
	If err.number > 0 then 
		i=instr(AppFolder, ":")  
		Ordner = mid(AppFolder, i - 1, 1) & ":\"  
	end if
else
	Ordner=Sendenan(0)
	if not (myfiles.FolderExists(Ordner)) then
		g = msgbox("Wählen Sie bitte einen gültigen Ordner aus")  
		wscript.quit
	end if
end if
So, nun möchte das Ganze mit einer Datei machen! face-smile


Grüße
Dani
gemini
gemini 03.04.2007 um 20:30:30 Uhr
Goto Top
@bastla
[Edit] @gemini: Aber ich hab' mehr Punkte ... face-wink [/Edit]
Wenn Frank die Bewertung nicht abgeschalten hätte bekämst du in jedem Fall 5 Punkte.

gemini
bastla
bastla 03.04.2007 um 20:42:45 Uhr
Goto Top
@gemini

Wenn Frank die Bewertung nicht abgeschalten hätte bekämst du in jedem Fall 5 Punkte.

Das ist aber nett von Dir - obwohl: so ganz ohne Leistungsdruck face-wink postet sich's doch viel entspannter ...

Außerdem: Auch so würde ich Dich punktemäßig wohl nicht so bald einholen (womit ich andererseits gut leben kann face-smile).

Grüße
bastla

P.S.: @Dani - Ich habe nicht vergessen, worum's hier eigentlich gehen sollte ...
bastla
bastla 03.04.2007 um 20:50:16 Uhr
Goto Top
@Dani

Vielleicht kannst Du damit etwas anfangen: http://www.visualbasicscript.com/m_1575/tm.htm
Anderer Ansatz hier: http://dieseyer.de/scr-html/alle.html
Einer noch: http://www.scriptinganswers.com/vault/Files%20and%20Folders/

Grüße
bastla

[Edit] Der Suchbegriff ist natürlich jeweils "BrowseForFile". [/Edit]
bastla
bastla 03.04.2007 um 21:06:56 Uhr
Goto Top
... so, und das (gefunden hier, aber ursprünglich wohl eher von hier stammend) ist jetzt sogar (unter XP) getestet:
MsgBox BrowseForFile("C:\", "JPEG Images (.jpg)|*.jpg|All Files|*.*")  

Function BrowseForFile(pstrPath, pstrFilter)
Set objDialog = CreateObject("UserAccounts.CommonDialog")  
objDialog.Filter = pstrFilter
objDialog.InitialDir = pstrPath
objDialog.Flags = &H80000 + &H4 + &H8
intResult = objDialog.ShowOpen
BrowseForFile = objDialog.FileName
End Function
Anmerkung: Trennzeichen "|" musste angepasst werden.

Liste der möglichen Flags (von hier):
Alle Flags für den "Öffnen" - Dialog:

Public Const OFN_READONLY = &H1
Public Const OFN_OVERWRITEPROMPT = &H2
Public Const OFN_HIDEREADONLY = &H4
Public Const OFN_NOCHANGEDIR = &H8
Public Const OFN_SHOWHELP = &H10
Public Const OFN_ENABLEHOOK = &H20
Public Const OFN_ENABLETEMPLATE = &H40
Public Const OFN_ENABLETEMPLATEHANDLE = &H80
Public Const OFN_NOVALIDATE = &H100
Public Const OFN_ALLOWMULTISELECT = &H200
Public Const OFN_EXTENSIONDIFFERENT = &H400
Public Const OFN_PATHMUSTEXIST = &H800
Public Const OFN_FILEMUSTEXIST = &H1000
Public Const OFN_CREATEPROMPT = &H2000
Public Const OFN_SHAREAWARE = &H4000
Public Const OFN_NOREADONLYRETURN = &H8000&
Public Const OFN_NOTESTFILECREATE = &H10000
Public Const OFN_NONETWORKBUTTON = &H20000
Public Const OFN_NOLONGNAMES = &H40000
Public Const OFN_EXPLORER = &H80000
Public Const OFN_NODEREFERENCELINKS = &H100000
Public Const OFN_LONGNAMES = &H200000

Normalerweise schreibt man das dann so:

CommonDialog.Flags = OFN_HIDEREADONLY Or OFN_FILEMUSTEXIST


Grüße
bastla

[Edit] Läuft nicht unter W2000 face-sad [/Edit]
[Edit2] Liste mit Flags hinzugefügt [/Edit2]
Biber
Biber 03.04.2007 um 21:12:43 Uhr
Goto Top
[Edit] Läuft nicht unter W2000 [/Edit]
Es sei denn, das NET-Framework 2.0 oder höher ist installiert

Gruss Biber
bastla
bastla 03.04.2007 um 21:33:10 Uhr
Goto Top
@Biber

Abgesehen davon, dass ich mich natürlich frage, woher Du das nun schon wieder weißt: Wie hoch wäre denn "höher"?

Grüße
bastla
Dani
Dani 03.04.2007 um 22:02:54 Uhr
Goto Top
Also vielen Dank an euch! So klappts wunderbar. Das wäre mal wieder ein 4-5 Punkte Thread. *gg* Die Hilfe hier ist einfach nur perfekt (kann ich nur immer wiederholen). Man bekommt so zusagen die Lösung auf dem Silbertablett + Quelle(n).

Nun habe ich den Pfad der Datei. So würde ich die Datei dann einlesen:
Set objFSO = CreateObject("Scripting.FileSystemObject")  
Set objFile = objFSO.OpenTextFile("ou.txt", 1)  

Do Until objFile.AtEndOfStream
     Redim Preserve arrFileLines(i)
     arrFileLines(i) = objFile.ReadLine
i = i + 1
Loop
objFile.Close
Grüße
Dani
bastla
bastla 03.04.2007 um 22:14:22 Uhr
Goto Top
... oder (zum "Splitten"-Üben face-wink):
Set objFSO = CreateObject("Scripting.FileSystemObject")  
Set objFile = objFSO.OpenTextFile("ou.txt", 1)  
arrFileLines = Split(objFile.ReadAll, vbCrLF)
objFile.Close

Grüße
bastla
Biber
Biber 03.04.2007 um 22:17:14 Uhr
Goto Top
@bastla
Wie hoch wäre denn "höher"?
Um mal eine meiner heissgeliebten Tankstellen-PC-Zeitschriften zu zitieren:
Download: Microsoft .net Framework 3.0 (32 Bit und 64-Bit-Version)

Allerdings -da hast Du natürlich Recht- wird sich das wohl kaum auf W2000 installieren lassen.
Also streiche das "oder höher". Und vielleicht auch das "2.0".
Kann sein, dass es auch schon mit NET 1.1 lief.
ist mir eigentlich auch egal

@Dani
BTW, wo ich Dich grad sehe... wie ist denn der Status in Deinem MySQL-Thread??
bastla
bastla 03.04.2007 um 22:26:02 Uhr
Goto Top
@Biber

Auch wenn's auch mir nicht ganz sooo wichtig ist (und nur falls Du's bei der Hand hast): Was bräuchte ich außer dem .NET-Framework noch (derzeit Fehlermeldung: "ActiveX-Komponenten kann kein Objekt erstellen: 'UserAccounts.CommonDialog' / Code: 800A01AD")?

Grüße
bastla
Dani
Dani 04.04.2007 um 10:36:50 Uhr
Goto Top
Moin,
genau...das Problem habe ich jetzt auch auf meinem Windows Server 2003. Framework 2.0 und 3.0 sind vorhanden!


Gr
Dani
Dani 04.04.2007 um 13:18:24 Uhr
Goto Top
Hi,
also ich habe nun eine Lösung!


Gruß
Dani
Biber
Biber 04.04.2007 um 14:35:50 Uhr
Goto Top
@bastla

Hm...ich habe auch noch ein wenig recherchiert... Kann sein, dass es auch unter W2000 nicht läuft, weil eigentlich das UserAccounts-Control-Panel (Nusrmgr.cpl) benötigt wird.

Und das gibt es ja erst ab WinXP.
Gestern hätte/hatte ich jedenfalls diesen FileDialog noch dem NET-Framework zugeordnet.

Sorry, wenn ich da unerfüllbare Hoffnungen geweckt haben sollte.

Wieso lesen hier denn so selten die Unterschleißheimer mit, die vielleicht mal Verbindliches aussagen könnten?

Grüße
Biber
>"also ich habe nun eine L" ?!? *rotwerd*
Wollen wir mal hoffen, dass es eine "Lösung" war... *ggg
Dani
Dani 05.04.2007 um 07:54:56 Uhr
Goto Top
Moin,
also nächster Versuch. Hier mal meine Lösung für einen Windows Server 2003:
'Datei auswählen  
Set objOpenDialog = CreateObject("SAFRCFileDlg.FileOpen")  
intReturn = objOpenDialog.OpenFileOpenDlg

If intReturn Then
    strFilePath = objOpenDialog.FileName
Else
	MsgBox("Keine Datei ausgewählt!")  
    Wscript.Quit
End If
So gehts bei mir mal. *gg*


Grüße
Dani