VBA Open Methode
Betrifft: VBA Open Methode
von: Jens
Geschrieben am: 20.09.2004 13:27:48
Hallo Leute,
ich bin dabei mir einen Parser zu programmieren, der externe Texttemplates einliest und dann bei bestimmten Platzhaltern den Wert gegen Daten aus der Tabelle ersetzt.
Leider hab ich das Problem, dass ich es nicht hinbekomme die gesamte Textdatei einzulesen... irgendwie nimmt er immer nur die letzte Zeile.
Hat jemand einen Tipp?
Bin für jede Hilfe sehr dankbar ;-)
Ciao
Jens
Function getTemplate(location As String) As String
Dim txt As String
Open location For Input As #1
Do Until EOF(1)
Line Input #1, txt
Loop
Close
getTemplate = txt
End Function
Function parser(templateSource As String) As String
templateSource = Replace(templateSource, "%%vorname%%", "Jens")
templateSource = Replace(templateSource, "%%nachname%%", "Müller")
templateSource = Replace(templateSource, "%%Kundennummer%%", "123435")
parser = templateSource
End Function
Sub DoParse(where As String)
MsgBox (parser(getTemplate("c:\test.txt")))
End Sub
Betrifft: AW: VBA Open Methode
von: Jens
Geschrieben am: 20.09.2004 13:43:31
ach so... hier noch der inhalt des textfiles. Im Moment parst er nur die letzte Zeile. Die obere taucht in der MsgBox Ausgabe gar nicht erst auf... Oder liegt das vielleicht an der MsgBox, dass ich immer nur die letzte Zeile zu sehen bekomme? Hat das was mit Zeilenumbrüchen zu tun?
%%kundennummer%%
Sehr geehrter %%vorname%% %%nachname%%
Betrifft: AW: VBA Open Methode
von: Frank
Geschrieben am: 20.09.2004 13:44:35
Hallo Jens,
eigentlich ist die Sache klar: Bei jedem Aufruf von getTemplate wird Test.TXT geöffnet, anschließend in der Do Until Schleife bis zum letzten Satz geblättert, dann wird die Datei geschlossen und der letzte Satz als String zurückgegeben. Und beim nächsten Aufruf der Funktion beginnt das Spiel wieder von vorn.
Bau die Open und Close Anweisung in die DoParse-Prozedur ein. Und die Do Until-Schleife rausnehmen und durch eine If-Abfrage ewrsetzen:
If Not EOF(1) then
LineInput #1, txt
else
close #1
end if
Hoffe, es hat geholfen.
Gruß Frank
Betrifft: AW: VBA Open Methode
von: jetzt nimmt er nur die erste zeile *fg*
Geschrieben am: 20.09.2004 13:55:06
Hallo Frank,
erstmal danke für Deine Hilfe ;-)
Ich hab die Änderungen mal eingebaut, nur parst er nu die erste Zeile und ignoriert die Folgezeilen :-(
Ich versteh das irgendwie nich, man muss doch irgendwie son dusseliges Textfile vollständig in ne Variable schreiben können.
Function parser(templateSource As String) As String
templateSource = Replace(templateSource, "%%vorname%%", "Jens")
templateSource = Replace(templateSource, "%%nachname%%", "Müller")
templateSource = Replace(templateSource, "%%kundennummer%%", "123435")
parser = templateSource
End Function
Function DoParse(where As String) As String
Dim txt As String
Open where For Input As #1
If Not EOF(1) Then
Line Input #1, txt
Else
Close #1
End If
Close
DoParse = parser(txt)
End Function
Betrifft: AW: VBA Open Methode
von: Frank
Geschrieben am: 20.09.2004 14:13:47
Hallo Jens,
versuch´s mal so:
Sub DoParse()
Dim txt as String
Open "C:\Test.TXT" for Input as #1
Do While Not EOF(1)
LineInput #1, txt
MsgBox(parser(txt))
Loop
End Sub
Die Funktion getTemplate also völlig weglassen, was die bislang gemancht hat steht jetzt in der Sub.
Gruß
Frank
Betrifft: AW: VBA Open Methode
von: Dan
Geschrieben am: 20.09.2004 14:11:44
Koennte es das sein : _?
Option Explicit
Sub test()
MsgBox getTemplate("C:\Temp\test.txt")
End Sub
Function getTemplate(location As String) As String
Dim txt As String
Open location For Input As #1
getTemplate = ""
Do Until EOF(1)
Line Input #1, txt
If (getTemplate = "") Then
getTemplate = txt
Else
getTemplate = getTemplate & vbCrLf & txt
End If
Loop
Close
End Function
Betrifft: LÖSUNG!
von: Jens
Geschrieben am: 20.09.2004 14:18:17
also hier ist die lösung! hab das grade rausgegoogelt.
trotzdem danke für eure tipps!
kleine Frage noch: was hat es mit diesem option explicit auf sich?
Function parser(templateSource As String) As String
templateSource = Replace(templateSource, "%%vorname%%", "Jens")
templateSource = Replace(templateSource, "%%nachname%%", "Müller")
templateSource = Replace(templateSource, "%%kundennummer%%", "123435")
parser = templateSource
End Function
Function DoParse(where As String) As String
Dim strImport As String
Dim lngChars As Long
Dim intFile As Integer
intFile = FreeFile
Open where For Input As intFile
lngChars = LOF(intFile)
strImport = Input(lngChars, intFile)
DoParse = parser(strImport)
End Function
Betrifft: AW: LÖSUNG!
von: Kurt
Geschrieben am: 20.09.2004 17:55:23
für
Option Explicit muss man keinen Beitrag auf offen stellen ! Schon gar nicht bei vba=Gut
und Tschüss Kurt
Beiträge aus den Excel-Beispielen zum Thema "VBA Open Methode"