StringReplace Zeilenumbruch erhalten

  • Hallo zusammen,

    Hab da mal wieder ein kleines Problem. ich lese eine Text Datei mit FileRead ein und trenne mit _StringBetween einen Teil heraus und speicher ihn separat ab. leider gehen alle Zeilenumbrüche dabei verloren! Wie kann ich das verhindern? Brauche die leider, da es HTML Text ist den ich hinterher wider anzeigen will.

    Kann gad kein Beispiel geben. Bin auf Firma und am Handy. THX

  • wenn du das eh als array hast, wieso schreibst du die array nicht wieder in eine variable (so wolltest du das doch, oder?)
    und arrays kann man mit dem index genau wie strings bearbeiten!
    außerdem wäre es hilfreich zumindest ein beispiel zu sehen zu bekommen

    Spoiler anzeigen
    [autoit]

    $array = "?"
    $string = ""
    For $i = 1 To $array[0]
    $string &= $array[$i] & @CRLF
    Next

    [/autoit]
  • qblack_skorpi

    Hatte ja oben schon geschrieben warum kein Beispiel da ist. Kommt aber jetzt

    [autoit]


    #include <string.au3>
    #include <IE.au3>
    #include <array.au3>

    [/autoit][autoit][/autoit][autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit][autoit][/autoit][autoit]

    $Form1 = GUICreate("Geo", 1024, 768, 200, 127)
    $Datei = GUICtrlCreateMenu("Datei")
    $gpx_open = GUICtrlCreateMenuItem("GPX Datei öffnen", $Datei)
    $tool_exit = GUICtrlCreateMenuItem("Beenden", $Datei)

    [/autoit][autoit][/autoit][autoit]

    GUISetState(@SW_SHOW)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $gpx_open
    $pfad_gpx = FileOpenDialog("Wähle die GPX Datei aus", "c:\", " GeoCache Dateien (*.gpx)")
    $file = FileOpen($pfad_gpx, 0)
    $data = FileRead($file)
    FileClose($file)
    MsgBox(0, "1", "" & $data) ; Hier ist noch alles i.O.
    $beschreibung = _StringBetween($data, "<description html=" & Chr(34) & "true" & Chr(34) & ">", "</description>")
    MsgBox(0, "2", "" & $beschreibung[0]); Hier nicht mehr
    $beschreibung = "<description html=" & Chr(34) & "true" & Chr(34) & ">" & $beschreibung[0] & "</description>"
    MsgBox(0, "3", "" & $beschreibung);Hier dann auch nicht :)

    [/autoit][autoit][/autoit][autoit]

    $file = FileOpen("c:\temp.html", 2)
    FileWrite($file, $beschreibung)
    FileClose($file)

    [/autoit][autoit][/autoit][autoit]

    $object = _IECreateEmbedded()
    $object_ctrl = GUICtrlCreateObj($object, 10, 470, 1000, 265)
    $URL = "c:\temp.html"
    _IENavigate($object, $URL)
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • Ich hab ein wenig gegoogelt und mir eine runtergeladen. In der steht nur keine description, also wäre es wirklich schön, ein Beispiel zu posten.

    Wieso schreibst du nicht anstelle von:

    [autoit]


    "<description html=" & Chr(34) & "true" & Chr(34) & ">" & $beschreibung[0] & "</description>"

    [/autoit]

    einfach:

    [autoit]


    '<description html="true">' & $beschreibung[0] & "</description>"

    [/autoit]

    ?

    Bei einem anderen Programm von mir löscht _Stringbetween nicht die @CRLFs ( @CRs).

  • moin,

    Zu der Schreibweise: Ganz einfach, nicht dran gedacht. Weist doch, warum einfach wenn es auch kompliziert geht!

    So, hab mal eine gpx Datei anghängt.t(xt umbenannt) .Daraus brauche ich den description Teil. Hab da gar nicht drüber nach gedacht, sry. Macht das aber auch bei ganz normalen Text den ich selber in txt eingegeben habe.

    • Offizieller Beitrag

    Was ist das denn für eine HTML-Kodierung? Kannst Du die Seite nicht anders auslesen?

    Wenn nein, musst Du halt alles umwandeln:

    Spoiler anzeigen
    [autoit]


    $sText = FileRead(@ScriptDir & '\OC91F8.txt')
    $sDescription = StringRegExpReplace($sText, '(?s).+<description html="true">(.+)</description>.+', '$1')
    Dim $aReplace[9][2] = [['&lt;p&gt;', ''],['&lt;/p&gt;', @CRLF],['&amp;nbsp;', ' '], _
    ['&amp;ouml;', 'ö'],['&amp;uuml;', 'ü'],['&amp;auml;', 'ä'], _
    ['&amp;szlig;', 'ß'],['&amp;deg;', '°'],['&lt;br /&gt;', @CRLF]]
    For $i = 0 To UBound($aReplace) - 1
    $sDescription = StringReplace($sDescription, $aReplace[$i][0], $aReplace[$i][1])
    Next
    MsgBox(0, 0, $sDescription)

    [/autoit]


    So hast Du dann wieder einen lesbaren Text.

  • Stimmt wäre eine Möglichkeit. kopier ich den description Teil manuell in eine neue Datei, wirds im FF einwandfrei angezeigt, da der Teil ja HTML ist. Ansonsten ist es doch ne ganz normale xml oder nichtC

  • BugFix

    Hast sogar Recht. Ich habe die Dateien immer in Scite geöffnet und da sieht´s so aus:

    und hab mich dadurch täuschen lassen. Dummerweise funktioniert jetzt auch das Kopieren nicht mehr. Hmm keine Ahnung was ich da gemacht habe das es einmal funktioniert hat. Naja, trotzdem muss ich den umgewandelten Code irgendwie im IE angezeigt kriegen.
    Aber jetzt konzentrier ich mich auch, :-(, sry.

    • Offizieller Beitrag

    Also willst Du nach dem extrahieren wieder HTML haben?

    Spoiler anzeigen
    [autoit]


    $sSourcefile = @ScriptDir & '\OC91F8.txt'
    $sTargetfile = @ScriptDir & '\OC91F8.html'

    [/autoit] [autoit][/autoit] [autoit]

    $sText = FileRead($sSourcefile)
    $sDescription = StringRegExpReplace($sText, '(?s).+<description html="true">(.+)</description>.+', '$1')
    Dim $aReplace[9][2] = [['&lt;p&gt;', '<p>'],['&lt;/p&gt;', '</p>'],['&amp;nbsp;', '&nbsp;'], _
    ['&amp;ouml;', '&ouml;'],['&amp;uuml;', '&uuml;'],['&amp;auml;', '&auml;'], _
    ['&amp;szlig;', '&szlig;'],['&amp;deg;', '&deg;'],['&lt;br /&gt;', '<br />']]
    For $i = 0 To UBound($aReplace) - 1
    $sDescription = StringReplace($sDescription, $aReplace[$i][0], $aReplace[$i][1])
    Next
    $hFile = FileOpen($sTargetfile, 2)
    If $hFile = -1 Then Exit
    FileWrite($hFile, '<html><body>')
    FileWrite($hFile, $sDescription)
    FileWrite($hFile, '</body></html>')
    FileClose($hFile)
    ShellExecute(@ProgramFilesDir & '\Internet Explorer\iexplore.exe', $sTargetfile)

    [/autoit]
  • BugFix

    :D:thumbup:

    Oscar

    Ja funktioniert und genau das möchte ich haben. Nur denke ich wird das schon ganzschön mühselig, wenn ich mir mal anschaue wieviele Ersetzungen ich machen müsste damit es immer funktioniert. Hatte gehofft das es eine einfachere Möglichkeit gibt XML in einem Browser formatiert anzuzeigen (kenne mich in HTML und XML nicht wirklich aus). Dummerweise ist das halt das einzigste Format, welches ich kriegen kann. Werd mal weiter google bemühen, vielleicht finde ich doch noch was.

    • Offizieller Beitrag

    Ach, man muss doch gar nicht so viel umwandeln (wenn es nur HTML sein soll). Das meiste ist doch gleich. :whistling:

    So reicht doch:

    Spoiler anzeigen
    [autoit]


    $sSourcefile = @ScriptDir & '\OC91F8.txt'
    $sTargetfile = @ScriptDir & '\OC91F8.html'

    [/autoit] [autoit][/autoit] [autoit]

    $sText = FileRead($sSourcefile)
    $sDescription = StringRegExpReplace($sText, '(?s).+<description html="true">(.+)</description>.+', '$1')
    Dim $aReplace[3][2] = [['&lt;', '<'],['&gt;', '>'],['&amp;', '&']]
    For $i = 0 To UBound($aReplace) - 1
    $sDescription = StringReplace($sDescription, $aReplace[$i][0], $aReplace[$i][1])
    Next
    $hFile = FileOpen($sTargetfile, 2)
    If $hFile = -1 Then Exit
    FileWrite($hFile, '<html><body>')
    FileWrite($hFile, $sDescription)
    FileWrite($hFile, '</body></html>')
    FileClose($hFile)
    ShellExecute(@ProgramFilesDir & '\Internet Explorer\iexplore.exe', $sTargetfile)

    [/autoit]
  • Hey, das sieht doch schon ganz gut aus !! THX.

    Ist halt hilfreich, wenn man weis was gleich ist und was nicht ^^ . Jetzt muss ich nur noch die Bilder bekommen und ich bin schon (zur Sicherheit) fast zufrieden