Youtube-links aus .txt raussuchen lassen

  • Tach zusammen,

    da ich noch n ziemlicher Frischling beim programmieren bin werde ich jetzt einfach mal
    eure Kenntnisse beanspruchen.
    Alsoo, ich möchte aus einer Text-datei alle youtube-links raussuchen und in eine andere
    datei abspeichern lassen. Das Problem ist, dass ich es aus irgendeinem Grund noch nicht mal schaffe
    Irgendetwas aus einer datei auszulesen.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <file.au3>
    #Include <string.au3>

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

    Dim $array
    $StringSearch1 = ""
    $StringSearch2 = ""
    $arraytoString = _ArrayToString( $array )
    $search = _StringBetween( $arraytoString, $StringSearch1, $StringSearch2)

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

    _FileReadToArray ( "C:\Neu Textdokument (2).txt" , $array )
    _StringBetween( $array, $StringSearch1, $StringSearch2)

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

    If @error Then
    MsgBox( 0, " Ergebnis" , "Fehler oder nicht gefunden, Fehlercode: " & @error )
    Else
    MsgBox( 0, " Ergebnis", $search )
    endif

    [/autoit]

    Ich hoffe jetzt einfach mal dass ihr mir helfen könnt :D

    Der Noob

    Einmal editiert, zuletzt von Der Noob (2. April 2009 um 13:42)

  • Hallo Der_Noob,

    um Daten aus einer Textdatei zu lesen benutzt man FileRead
    um Daten zu schreiben benutzt man FileWrite
    um Daten zu manipulieren verschiedene String-Funktionen z.B. _StringBetween, StringInStr, StringTrimLeft, StringLeft
    eigentlich sollte _StringBetween schon ausreichen, damit habe ich aber in diesem Fall keine Lösung zustande gebracht

    StringSplit kann mann nehmen um die eingelesenen Daten in ein Array zu lesen

    Wenn du dir die Beispiele zu den Stichwörtern anschaust, kommst du auf die Lösung,

    wenn du es selbst lösen möchtest den Spoiler nicht aufmachen

    Hier ist mein Lösungsansatz (geht sicher noch schöner, kürzer und flexibler) funktioniert nur mit dem Text Datei-Schema wie eine von dir hochgeladen wurde

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    #include <GUIConstantsEx.au3>
    #include <ListBoxConstants.au3>
    #Include <GuiListBox.au3>
    #include <String.au3>
    #include<Array.au3>

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

    $hGUI = GUICreate("Test", 639, 440, 202, 127)
    $hList = GUICtrlCreateList("", 16, 16, 624, 424)
    GUISetState(@SW_SHOW)

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

    $FileRead = FileRead (@ScriptDir & "\Neu Textdokument (2).txt")
    If $FileRead = -1 Then ;<---------- nur vorsichtshalber
    MsgBox(24, "Fehler", "Datei kann nicht geöffnet werden.")
    Else
    $Split = StringSplit ($FileRead, @CR)
    ;_ArrayDisplay($Split) damit kann man sich das Original anschauen
    For $i = 1 to UBound($Split,1) -1 Step 2 ;Step 2 kann auch weggelassen werden da Zeile 25 auf YouTube prüft
    ;mit 1 anfangen (=2.Zeile bei 0 basiertem Index)
    ;Step 2 weil in jeder 2 Zeile am Anfang der YouTube-Link steht
    $tZeile=$Split[$i]
    $j = StringInStr($tZeile,'http://de.youtube.com')
    if $j<>0 then
    ;$tZeile = _Stringbetween($tZeile,'http://','" ADD_DATE="') müsste auch funktionieren
    $tZeile=StringTrimLeft($tZeile,StringInStr($tZeile,'http://')+6) ;alles was vor dem eigentlichen Link steht wegschmeissen
    $tZeile=StringLeft($tZeile,StringInStr($tZeile,'" ADD_DATE=')-1) ;alles was danach steht auch wegschmeissen
    if $tZeile <> "" then GUICtrlSetData($hList,$tZeile)
    EndIf
    Next
    FileClose($FileRead)
    EndIf

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

    $File=FileOpen (@ScriptDir & "\YouTube.TXT", 2)
    If $File = -1 Then ;<---------------------nur vorsichtshalber
    MsgBox(24, "Fehler", "Datei kann nicht geöffnet werden.")
    Else
    $List1Count = _GUICtrlListBox_GetCount ($hList)
    For $i = 0 To $List1Count-1 ;0-basierter Index hat 1. Zeile = Zeile[0]
    FileWrite ($File, _GUICtrlListBox_GetText ($hList, $i) & @CRLF)
    Next
    FileClose($File)
    EndIf

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]


    in der Hoffnung, das du nicht nur auf die schnelle ein Script abstauben wolltest wünsche ich dir viel Spass mi AuotoIT und verbleibe

    mfg (Auto)Bert

    • Offizieller Beitrag

    Und hier eine Lösung mit StringRegExp:

    Spoiler anzeigen
    [autoit]


    $sFile = FileRead(@ScriptDir & '\Neu Textdokument (2).txt')
    $aLinks = StringRegExp($sFile, '"(http://de\.youtube\.com.*?)"', 3)
    If Not IsArray($aLinks) Then Exit MsgBox(0, 0, 'Keine Links gefunden!')
    $hFile = FileOpen(@ScriptDir & '\YouTubeLinks.txt', 2)
    If $hFile <> -1 Then
    For $i = 0 To UBound($aLinks) - 1
    FileWrite($hFile, $aLinks[$i] & @CRLF)
    Next
    FileClose($hFile)
    EndIf

    [/autoit]