Mit inetgetsource Zeilen aus einer Online-Datei lesen

  • Hiho liebe AutoItler,
    habe heute mal versucht aus dem Internet eine Textdatei
    über inetgetsource zu lesen, dabei hatte ich einige Probleme.

    Edit: Funktionsweise:
    Also es soll so funktionieren, dass er jede Zeile abließt und mir dann sagt in der Zeile Xy, ist die Zahl Zx, die du gesucht hast. Er soll mir halt die Variable in der Zeile suchen und schauen ob diese existiert.

    Nun zu meinem Code:

    [autoit]

    #include <INet.au3>

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

    $file = _INetGetSource("www.XXXXX.XX.funpic.de/TESTSCAN50.txt")

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

    $variable = 22
    $line =1

    for $i = 1 to 50
    $zeile = FileReadLine($file, $i)
    if $zeile = $variable Then
    msgbox(0,"","Gefunden in Zeile: "& $line)
    EndIf
    $line +=1
    Next

    [/autoit]

    Also ein Fehler wird mir zwar net angezeigt aber durchsuchen tut er das auchnicht...

    2 Mal editiert, zuletzt von Roggan (5. März 2009 um 23:29)

  • _InetGetSource gibt einen String zurück, kein FileHandle ;)
    Nimm einfach InetGet:

    [autoit]

    #include <INet.au3>
    $file="test.txt"
    INetGet("www.XXXXX.XX.funpic.de/TESTSCAN50.txt",$file)

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

    $variable = 22
    $line =1

    for $i = 1 to 50
    $zeile = FileReadLine($file, $i)
    if $zeile = $variable Then
    msgbox(0,"","Gefunden in Zeile: "& $line)
    EndIf
    $line +=1
    Next

    [/autoit]

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • ja Inetget ist mir klar, ich möchte die Datei aber auslesen ohne sie auf meinem Pc zuspeichern.. :(

  • Dann gehts so:

    [autoit]


    $variable=22
    $sHTML=_InetGetSource("bhasdudhashdf")
    $array=StringSplit($sHTML,@CRLF)
    For $i=1 to Ubound($array)-1
    If $array[$i]=$variable Then Msgbox(0,"Gefunden in Ziele",$i)
    Next

    [/autoit]


    sag mal, obs geht.
    /edit: Ja, klar, das habe ich vorasugesetzt. Ich habs angepasst

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

    Einmal editiert, zuletzt von L3viathan2142 (5. März 2009 um 21:06)

  • Es geht nicht und folgendes wird mir angezeigt:

    Code
    K:\TEST-FileReadLineVariable.au3(7,25) : WARNING: $variable: possibly used before declaration.
    If $array[$i]=$variable Then
    ~~~~~~~~~~~~~~~~~~~~~~~~^
    K:\TEST-FileReadLineVariable.au3(7,25) : ERROR: $variable: undeclared global variable.
    If $array[$i]=$variable Then
    ~~~~~~~~~~~~~~~~~~~~~~~~^
    K:\TEST-FileReadLineVariable.au3 - 1 error(s), 1 warning(s)


    Edit wegen L3viathan2142s Edit: Also es funktioniert einwandfrei, nur zeigt er mir einige Zeilen doch falsch an,
    so ist zb. in Zeile 31 die Zahl: 22 vorhanden, bei mir gibt das Script aber Zeile: 43 aus. :S

    Einmal editiert, zuletzt von Roggan (5. März 2009 um 23:06)

  • ist keine html, ist eine Textdatei aufn Webspace und es soll nirgends aufn Rechner landen,
    damit man nichts manipuliert oder Sachen darausließt, sag ich jetzt mal. ;)

  • nachdem ich Deine Datei ja nicht testen kann, hab oich mal mit irgendeiner *.txt Datei aus dem Internet gespielt.
    Das ist dabei herausgekommen.
    Um das temporäre zwischenspeichern kommst Du nicht herum, da Du die geladene Datei nicht ohne erheblichen Aufwand direkt in den Speicher laden und darauf referenzieren kannst.
    Du kannst der lokalen Datei ja einen unverfänglichen Namen geben und außerdem wird diese ja innerhalb von 2-3 sek. wieder gelöscht.
    Da müsste einer schon verdammt schnell sein, die Datei zu kopieren ;)

    Spoiler anzeigen
    [autoit]

    #Include <Array.au3>
    #include <file.au3>
    $variable=97
    $filelokal="test.txt"
    $inetpfad="http://www.transit.ru/mailform.txt"
    $sHTML=InetGet($inetpfad,$filelokal,1,0)
    Dim $aRecords
    _FileReadToArray(@ScriptDir&"\"&$filelokal,$aRecords)
    For $i = 1 To UBound($aRecords)-1
    If StringInStr($aRecords[$i],$variable) Then MsgBox(0, '', "Variable ist vorhanden in Zeile: "&$i)
    Next
    FileDelete(@ScriptDir&"\"&$filelokal); temporäre Datei löschen
    _ArrayDisplay($aRecords)

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

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Zitat

    Um das temporäre zwischenspeichern kommst Du nicht herum, da Du die geladene Datei nicht ohne erheblichen Aufwand direkt in den Speicher laden und darauf referenzieren kannst.
    Du kannst der lokalen Datei ja einen unverfänglichen Namen geben

    Das stimmt schon was du meinst...

    Zitat

    ...und außerdem wird diese ja innerhalb von 2-3 sek. wieder gelöscht.
    Da müsste einer schon verdammt schnell sein, die Datei zu kopieren ;)

    Da muss ich ganz klar: nein, sagen.
    Warum? Während die Anwendung mir das ausgibt, hier ist es die MsgBox ist die Datei noch im Speicher.
    Wenn der User das also net wegdrückt, kann er gemütlich schauen und verändern der Datei...


    Da würd ich BugFix-Methode zustimmen mit dem Temp. ;)
    Achja bei dir Schnuffel, zeigt er mir am Ende noch irgendeinen Unsinn an, heißt der User soll das ganze doch garnet sehen, was da überprüft wird. X( :P

    _ArrayDisplay($aRecords) deswegen gelöscht

  • tut mir Leid, wenn Du mein Beispiel nicht verstanden hast.
    Die MsgBox steht nur zur Verdeutlichung dass das Ereignis erkannt wird und verarbeitet werden kann.
    Selbstverständlich kannst Du das ersetzen durch einen Funktioneaufruf, ohne das der Anwender das sieht, oder irgendetwas machen muß. :D

    Die Anzeige am Schluß ist nur ein _ArrayDisplay(), dass Dir verdeutlichen sollte, wie das ganze als Aufsplittung in einzelne Array-Felder funktioniert.
    Die Zeile kannst Du natürlich einfach löschen.
    Der "Unsinn" der da drinnen steht ist der Inhalt einer *.txt-Datei, die ich im Internet gefunden habe.
    ;)

    Spoiler anzeigen
    [autoit]

    #Include <Array.au3>
    #include <file.au3>
    $variable = 22
    $filelokal="test.txt"
    $inetpfad="www.XXXXX.XX.funpic.de/TESTSCAN50.txt"
    $sHTML=InetGet($inetpfad,$filelokal,1,0)
    Dim $aRecords
    _FileReadToArray(@ScriptDir&"\"&$filelokal,$aRecords)
    For $i = 1 To UBound($aRecords)-1
    If StringInStr($aRecords[$i],$variable) Then MsgBox(0, '', "Variable ist vorhanden in Zeile: "&$i,1)
    Next
    FileDelete(@ScriptDir&"\"&$filelokal); temporäre Datei löschen

    [/autoit]

    Edit: ich hab mal Deinen Pfad eingefügt und Deine Wert, nachdem Du suchst.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • So, nachdem das funzt, ein weiteres Anliegen dazu:

    Kann man herausfinden ob Zeilen leer sind in der Textdatei?
    Soll so funktionieren, dass ich einen neuen Eintrag in die Textdatei schreibe,
    unter der letzt geschriebenen Zeile. So dass dann jeder neuer Beitrag eine neue Zeile bekommt,
    sich das aber nicht überschreibt. :rolleyes:

  • siehe FileWriteLine

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hab eben nochwas bemerkt zu dem eigentl Sinn des Scripts am Anfang,
    weswegen ich jetzt net klar komme mit deinen Codes:

    Und zwar wollte ich keine Ausgabe, wo sich die Variable befindet,
    sonders ob sie existiert in der Textdatei, wenn ja: weitermachen,
    wenn der Wert der Variable nicht in der Textdatei vorkommt: Dann Abbrechen oder Fehlermeldung. :huh:

    Bei mir war das nur nen Beispiel und konnte ich einfach umsetzen, ist halt mein Kauderwelch.
    Ich ändere das mal bei dir, sofern ich das schaffe, haha.

    Thx für all eure Hilfen dazu, auch wenn ich net um das Zwischenspeichern drumrum komme. :D

  • jetzt muß ich Dich mal ausbremsen.....

    Du erwartest jetzt nicht, dass ich Dir Dein Script schreibe, oder wie?
    Ich helfe gerne soweit ich kann. Wenn ich aber merke, dass von der hilfesuchenden Seite
    keinerlei Eigeninitiative kommt ist mein Interesse begrenzt.

    Spoiler anzeigen
    [autoit]

    #Include <Array.au3>
    #include <file.au3>
    $variable = 22
    $filelokal="test.txt"
    $inetpfad="www.XXXXX.XX.funpic.de/TESTSCAN50.txt"
    $sHTML=InetGet($inetpfad,$filelokal,1,0)
    Dim $aRecords
    _FileReadToArray(@ScriptDir&"\"&$filelokal,$aRecords)
    For $i = 1 To UBound($aRecords)-1
    If Not StringInStr($aRecords[$i],$variable) Then MsgBox(0,"", "Fehler!"&@CRLF&"Variable ist nicht vorhanden")
    Next
    FileDelete(@ScriptDir&"\"&$filelokal); temporäre Datei löschen

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • [autoit]

    #Include <Array.au3>
    #include <file.au3>
    $variable=97
    $filelokal="test.txt"
    $inetpfad="http://www.transit.ru/mailform.txt"
    $sHTML=InetGet($inetpfad,$filelokal,1,0)
    Dim $aRecords
    _FileReadToArray(@ScriptDir&"\"&$filelokal,$aRecords)
    For $i = 1 To UBound($aRecords)-1
    If StringInStr($aRecords[$i],$variable) Then MsgBox(0, '', "Variable ist vorhanden in Zeile: "&$i)
    Next
    Else
    MsgBox(0x40, "Error", "Nicht vorhanden!")
    Exit
    _ArrayDisplay($aRecords)

    [/autoit]

    So wie ich es umgeändert hätte, würde es nicht gehen ;) :rolleyes: ,
    ich wollt dich net ausnutzen, nur arbeite ich net mit Arrays, also keine Erfahrung damit und mit dem Befehl "StringInStr" hab ich auch nochnie gearbeitet, deswegen musste ich dich da leider um Unterstützung bitten, seh das bitte nicht falsch :S


    Ich danke dir für deine Geduld und Unterstützung :)

    Einmal editiert, zuletzt von Roggan (5. März 2009 um 23:50)

  • probier mal so weiter.....

    aber bitte lesen und versuchen zu verstehen, sonst macht das nicht viel Sinn.

    Spoiler anzeigen
    [autoit]

    #Include <Array.au3>
    #include <file.au3>
    $variable=97
    $filelokal="test.txt"
    $inetpfad="http://www.transit.ru/mailform.txt"
    $sHTML=InetGet($inetpfad,$filelokal,1,0)
    $istvorhanden=0
    Dim $aRecords
    _FileReadToArray(@ScriptDir&"\"&$filelokal,$aRecords)
    For $i = 1 To UBound($aRecords)-1
    If StringInStr($aRecords[$i],$variable) Then $istvorhanden = 1
    Next
    If $istvorhanden = 1 Then
    hierweitermachen()
    Else
    MsgBox(0x40, "Error", "Nicht vorhanden!")
    Exit
    EndIf

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

    Func hierweitermachen()

    ;Deine weiteren Befehle ....
    EndFunc

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)