Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
624to628
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
624to628
624to628
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Auslesen vonText aus File und Zurückschreiben

Auslesen vonText aus File und Zurückschreiben
15.06.2005 11:06:46
Helmut
Hallo liebe Forenmitglieder,
ich stehe leider wieder wo an, und es wäre super, wenn mir jemand von euch dabei helfen könnte.
Ich habe eine XML-Datei, in der zwischen den Tags
"EMSG_V1" Text "/EMSG_V1"
ein Text steht (hier "Text").
Ich möchte nur diesen Text zwischen den Tags aus der XML-Datei auslesen, die XML-Datei also öffnen, den Text in eine Zelle in einem Excel-File einfügen, die Excel-Datei speichern und die XML-Datei wieder schließen.
Dazu bräuchte ich eine genaue Angabe eines VBA-Script's, weil ich mich nämlich noch kaum damit auskenne.
Ihr würdet mir sehr helfen damit!
Danke im Voraus!
LG
Helmut

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Auslesen vonText aus File und Zurückschreiben
15.06.2005 12:03:07
bst
Hallo Helmut,
Versuch's mal so. Sollte funktionieren wenn es eine ASCII-Datei ist, sich Dein Tag immer komplett auf einer Zeile befindet und genau so aussieht:
&ltEMSG_V1&gtIrgendeinText&lt/EMSG_V1&gt
HTH, Bernd
--
Option Explicit

Private Const ForReading = 1

Sub test()
    Debug.Print ReadTag("d:\temp\xyz.xml", "EMSG_V1")
    Debug.Print ReadTag("d:\temp\xyz.xml", "NoTag")
    Debug.Print ReadTag("d:\temp\nofile.xml", "NoFile")
End Sub

Function ReadTag(fname As String, tag As String, Optional ignorecase As Boolean = False) As String
    Dim allLines As Variant
    Dim re As Object, m As Object
    Dim fso As Object, txtObj As Object
    
    ReadTag = "Error in ReadTag: File Not Found"
    If Dir(fname) = "" Then Exit Function
    
    ReadTag = "Error in ReadTag: Tag Not Found"
    Set fso = CreateObject("scripting.filesystemobject")
    Set txtObj = fso.OpenTextFile(fname, ForReading)
    allLines = txtObj.ReadAll
    txtObj.Close
    Set txtObj = Nothing
    Set fso = Nothing
    
    Set re = CreateObject("vbscript.regexp")
    re.Pattern = "<" & tag & ">(.*?)</" & tag & ">"
    re.ignorecase = ignorecase
    Set m = re.Execute(allLines)
    If m.Count > 0 Then ReadTag = m(0).submatches(0)
    Set m = Nothing
    Set re = Nothing
End Function

Anzeige
AW: Auslesen vonText aus File und Zurückschreiben
15.06.2005 12:52:23
MichaV
Hi,
hier noch eine Variante. Ausgegeben wird der komplette Text zwischen "EMSG_V1" und
"/EMSG_V1".
Das kannst Du ja entsprechend anpassen.


      
Option Explicit
Private Sub FindeText()
Dim s As String
Const b = "EMSG_V1"
Const c = "/EMSG_V1"
Open "e:\privat\test.xml" For Binary As #1
  s = Space(LOF(1))
  
Get #1, , s
Close #1
'bei Gross- Kleinsschreibung nicht beachten:
's = UCase(s): b = UCase(b): c = UCase(c)

On Error GoTo Fehler
MsgBox Mid(s, InStr(s, b) + Len(b), InStr(InStr(s, b), s, c) - InStr(s, b) - Len(b))
Exit Sub
Fehler: MsgBox "Nix gefunden"
End Sub 
Gruss- Micha
Anzeige
AW: Auslesen vonText aus File und Zurückschreiben
15.06.2005 13:34:47
bst
Hi Micha,
Gefällt mir. Ist auch noch viel kürzer und einfacher wie mein Teil.
Gruß, Bernd
AW: Auslesen vonText aus File und Zurückschreiben
15.06.2005 13:42:07
MichaV
Hi Bernd,
das freut mich. Bin richtiger Fan von diesem Datei- Handling ;o)
Aber hilf mir mal bitte auf der binär- Ebene: Wie groß darf die Datei sein, damit alles in einen String passt?(max 2 Milliarden Zeichen)
Danke- Micha
AW: Auslesen vonText aus File und Zurückschreiben
15.06.2005 14:12:41
bst
Hi Micha,
rein theoretisch liefert LOF einen LONG. Also 32 Bit inkl. Vorzeichen.
D.h. die größte positive Zahl ist bei 31 Bit = (2 hoch 31) - 1 = 2147483647
Siehe VBA-Hilfe zu Long ;-)
Ob sich so eine Datei allerdings auch öffnen läßt habe ich nicht probiert :-)
Gruß, Bernd
Anzeige
AW: Auslesen vonText aus File und Zurückschreiben
15.06.2005 14:55:25
MichaV
Hi Bernd,
danke für die Info. Interessanterweise passen in einen String auch 2^31 Zeichen. Also reicht LOF genau aus.
Auf einen Hinweis, daß die Datei nicht größer sein darf als 2GB (das wollt ich eigentlich wissen) werde ich in Zukunft dann weiterhin verzichten ;o)
Gruss- Micha
AW: Auslesen vonText aus File und Zurückschreiben
15.06.2005 13:43:47
Helmut
Hallo ihr beiden!!
Danke euch beiden recht herzlich!! Es funktioniert. Ich habe es auch mit dem Script vom Micha versucht. Ist eben kürzer und für mich "verständlicher".
Ihr habt mir sehr geholfen damit!!
LG
Helmut
Nachtrag
15.06.2005 13:55:05
MichaV
Hi,
Fehler bei Gross/ Klein nicht beachten.
s = UCase(s): b = UCase(b): c = UCase(c) ist Quatsch, weil b und c Konstanten sind.
Wenn Gross/ Kleinschreibung der Tags nicht beachtet werden soll, nimm
MsgBox Mid(s, InStr(1, s, b, vbTextCompare) + Len(b), InStr(InStr(1, s, b, vbTextCompare), s, c, vbTextCompare) - InStr(1, s, b, vbTextCompare) - Len(b))
Gruss- Micha
Anzeige
Danke!!
15.06.2005 15:15:29
Helmut
Hi Micha,
danke für den korrigierten Zusatz! Spitze!
LG
Helmut

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige