Hallo
ich habe ein XML-File, welches ich als ASCII-Datei öffnen möchte, um dabei Daten herauszuziehen.
Problem 1: Die Datei ist verschlüsselt und muß zunächst mit einem Tool (Winzip, 7.zip) dekomprimiert werden. Geht das, das File beim öffnen mit VB automatisch zu dekomprimieren, so das ich es als ASCII-Datei vorliegen habe??? Oder muß ich das extra tun und die Datei neu als ASCII abspeichern. Auch hier die Frage, ob das automatisiert über VB geht.
Problem 2: Wenn ich Problem 1 gelöst habe, habe ich die Datei als ASCII vorliegen im XML-Format. Im internetexplorer kann ich sie öffnen, und alles ist zeilenweise aufgebaut (liegt wohl am Format).
Im TExteditor liegt aber alles hintereinander ohne FOrmatierung.
Geht es, das File genauso wie im Internetexplorer zu formatieren???
Dann könnte ich zeilenweise auf die Daten zugeifen, das wäre besser für mich.
Viele Fragen, ich hoffe auf einfache Antworten.
Mfg Werner
Ergänzung für VB6!!!
ich sollte vielleicht noch ergänzen, das es um VB6 geht.
Habe was im Internet mit Parsern gefunden.
Hilft mir das weiter, was ist das genau???
Mfg Werner
Hallo Werner,
Habe was im Internet mit Parsern gefunden.
Hilft mir das weiter, was ist das genau???
ein Parser ‚übersetzt‘ einen Code in ein lesbares Format.
Beispiel Telnet:
Du baust eine Telnetsession zu einem Server mit Winsock auf und bekommst vom Server Daten. Cryptisches, mit bloßem Auge nicht lesbares Zeugs. 
Der Parser zerlegt dem empfangenen String und übersetzt ihn Dir in ein Lesbares Format. Wenn Du dann das anzeigst, was Du empfangen und übersetzt hast, weißt Du, daß Dich der Server auffordert, Deinen Loginnamen einzugeben. Den gibst Du ein, der muß wieder durch den Parser und der Server bekommt den Namen in einem Format, das er versteht …
Keine Ahnung, ob Dir das hilft.
Gruß, Rainer
Hallo Werner,
die Bearbeitung eines XML Dokumentes per SubString, Line etc. ist nicht „waidgerecht“. VB ist sehr wohl dazu in der Lage, dass auch als XML zu interpretieren, zu bearbeiten und per XPath zu „filtern“.
Ich rate dringend dazu, es wirklich per XML und den entsprechenden Funktionen zu machen.
Dim doc As MSXML.DOMDocument
Dim myNode As MSXML.IXMLDOMNode
orgStreamDoc.loadXML(xmlString)
For Each myNode In orgStreamDoc.selectNodes("/dickeTag")
myNode.text= "mein neuer Text"
next
mfg
Dirk.Pegasus
Hi
Hallo Dirk
danke für die Antwort.
Ich möchte aber das XML-File nicht bearbeiten, sondern nur die Infos rausziehen und in ein Excelfile abspeichern. Daher brauche ich mich nicht um die Struktur des XML-Files kümmern, sondern muß mir nur meine Daten suchen.
Ich denke das geht dann immer zwischen den Klammerbereichen .
Ich frage mich nur, wie das ASCII-File aussieht.
Ist das dann eine Zeile oder wo hört eine Zeile auf???
Wie stehst mit derdekomprimierung vorher???
Mfg Werner
Hallo Werner,
Ich denke das geht dann immer zwischen den Klammerbereichen
.
Das muss nicht so sein. Auch in den Tags können Informationen in Form von Attributen stecken:
und nun noch andere Inhalt
Der Inhalt kann dann auch noch als CDATA geakpselt sein:
Ich frage mich nur, wie das ASCII-File aussieht.
Ist das dann eine Zeile oder wo hört eine Zeile auf???
Das Ascii kann Zeilenumbrüche beinhalten, muss es aber nicht. Dein Browser interpretiert das XML und ergänzt diese und auch Einzüge. Sogar „+“ und „-“ ergänzt der, um Äste auf und zu zu machen. Was du dort siehst, ist halt aufbereitet.
Wie stehst mit derdekomprimierung vorher???
Leider keine Ahnung. Kommt das öfter vor? Ggfs. kann man das per batch abarbeiten.
mfg
Drik.Pegasus
EINE Zeile???
Hallo
habe das Gefühl, das XML ist in ASCII eine Zeile.
Wie kann ich da mehr Zeichen als die 65000 und ein paar fangen, wenn die Anzahl der Zeichen im String begrenzt ist, geht das dann einfach mit MID$???
Eine Zeile Code wäre hilfreich.
Mfg Werner
Hallo Werner,
habe das Gefühl, das XML ist in ASCII eine Zeile.
das kann sein, so etwas habe ich mir noch nicht angesehen. Ich habe aber auch Daten, die ich als einen einzigen langen String bekomme und in Datensätze und Felder zerlege. Ich habe da aber feste Längen und Adressen.
Wie kann ich da mehr Zeichen als die 65000
Wie kommst Du bei String auf die Grenze der Integer Variablen? Der String kann länger sein, wenn ich mich nicht irre.
und ein paar
fangen, wenn die Anzahl der Zeichen im String begrenzt ist,
geht das dann einfach mit MID$???
Das sollte so einfach gehen, Du darfst nur die Variablen, die Du verwendest nicht als Integer deklarieren, sondern als Long.
Wenn Du den Dateiinhalt aber lieber Blockweise lesen und verarbeiten möchtest, sollte das auch gehen.
Den Code habe ich nur mal getippt, nicht getestet, ich hoffe, der läuft so …
Option Explicit
Private Sub Command1\_Click()
Dim Na As String
Dim Cnt As Long
Dim Bl As Long
Dim Rest As Long
Dim i As Integer
Dim ff As Integer
Dim txt As String
Na = "C:\Test.txt"
Cnt = FileLen(Na)
Bl = Int(Cnt / 1024)
Rest = Cnt - (Bl \* 1024)
ff = FreeFile
Open Na For Binary As #ff
If Bl \> 0 Then
For i = 1 To Bl
txt = Space(1024)
Get #ff, , txt
verarbeiten txt
Next
End If
txt = Space(Rest)
Get #ff, , txt
verarbeiten txt
Close #ff
End Sub
Private Sub verarbeiten(ByVal Text As String)
'Deine Verarbeitung
End Sub
Gruß, Rainer
hi
Hallo Rainer,
wo ist dann die Grenze bei einer LongVariable.
Mein XML hat wohl 670000 Zeichen in EINER! zeile.
Ist es richtig, das du immer 1024 Zeichen zerlegst in deinem Beispiel???
Mfg Werner
Nachtrag
Hallo Werner,
probier mal diesen Code:
Option Explicit
Private Sub Command1\_Click()
Dim txt As String
txt = Space(900000)
Me.Caption = Len(txt)
End Sub
Bekommst Du auch eine Länge von 900 000 Zeichen zurück? Bei mir kein Problem.
Gruß, Rainer
Hallo Werner,
wo ist dann die Grenze bei einer LongVariable.
4294967259
Hexadezimal wird es verständlicher: &hff ff ff ff … 4 Bytes.
Mein XML hat wohl 670000 Zeichen in EINER! zeile.
Ist es richtig, das du immer 1024 Zeichen zerlegst in deinem
Beispiel???
Ja, immer 1k. Was Du da machst, ist Dir überlassen, war nur ein Beispiel.
Gruß, Rainer
Hallo Werner,
bevor Du Dir die Arme brichst. 
Bisher habe ich verstanden, daß Du einen langen Text bekommst und das was zusammen gehört immer in spitzen Klammern steht. „“ Richtig?
Und das möchtest Du nun in Zeilen angezeigt haben …
Dann mach das doch einfach mit Replace:
Option Explicit
Private Sub Command1\_Click()
Dim Na As String
Dim Cnt As Long
Dim ff As Integer
Dim Txt As String
ff = FreeFile
Na = "C:\Test.txt"
Cnt = FileLen(Na)
Txt = Space(Cnt)
Open Na For Binary As #ff
Get #ff, , Txt
Close #ff
Txt = Replace(Txt, "\>" & vbCrLf & "
Bei der Verwendung der Richtextbox lässt sich der Code aber auch noch weiter verkürzen:
Option Explicit
Private Sub Form\_Load()
RichTextBox1.FileName = "C:\Test.txt"
RichTextBox1.Text = Replace(RichTextBox1.Text, "\>" & vbCrLf & "
Noch einfacher wird's wohl nicht gehen. :smile:
Gruß, Rainer