Zahlen trennen

  • Hallo zusammen,:S

    Ist weiß jemand ob es möglich ist Zahlen zu trennen.

    Also bsp.

    Vorgabe : 123456789101112131415161718192021

    Endergebnis als Array: 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 18 - 19 - 20 - 21 also jede Zahl in ein als eigene spalte.

    & falls das geht würde das dann auch mit mehr Ziffern gehen ? bsp : 1001100210031004 = 1001 1002, 1003, 1004

    Ich weiß das man mit StringSplit die Zahlen trennen kann allerdings geht das in der einfachen Form mit mit einern ich weiß nicht wie das mit Zehnern oder hunderter gar tausender gehen soll.

    Mit freundlichen Grüßen

    Mojoe

  • Woher soll das Programm wissen das die "0" bei der 10 nicht eigenständig ist? (nur mal als Beispiel)

    Oder sind es immer fortlaufende Zahlen oder eine andere Logik (immer aufsteigend etc.)?

    Ggf. Hilft auch: Woher kommen diese "Informationen"?

    Ansonsten sehe ich keine Chance.

    Einmal editiert, zuletzt von Moombas (23. Februar 2021 um 15:46)

  • Ja da hast du recht, nachdem ich das abgeschickt hatte, dachte ich mir das so eine Frage kommt.


    ich bin grad auf dem Sprung ich werde die Frage mit Beispiel noch mal präzisieren, mit beispiel seite wo & wie das ganze geschehen soll.

    ich hoffe das ich es heute Abend noch schaffe.

  • So ich habe es leider nicht mehr geschafft, aber nun eine abgeänderte Version Basierend auf der Demo Page.

    Da ich mit einer anderen Datei Ordner Struktur & manche Variablen, erstellen lasse, stehen für dieses Beispiel alle Variabel im Skript voll ausgeschrieben.


    Es wird nur die Demo Seite gezeigt. Damit Ihr sehen könnt was ich vor habe.


    Um das laufen zu lassen müssen folgende dinge erfüllt werden :

    - Ordnerstruktur @Scriptdir \Datensatz

    @Scriptdir \BS.ini

    @Scriptdir \Datensatz\DB\DB.lvdb

    @Scriptdir \Datensatz\TXT\CarsucheNach.txt


    Inhalt :

    BS.ini

    Code
    [tel]
    =

    DB. lvdb

    Code
    <data>MKK-PT 62 (4916090807759)</data>=<SIM>4916090807759</SIM><TYP> (4916090807759)</TYP><BS>tel</BS>
    <data>Service Vito (4916092178795)</data>=<SIM>4916092178795</SIM><TYP>to (4916092178795)</TYP><BS>tel</BS>
    <data>Test AS</data>=<SIM>4915115152326</SIM><TYP></TYP><BS>tel</BS>

    CarsucheNach.txt

    Code
    Suchstring1|suchsting2|[Time stamp] (60000): 11.03.2020 15:01:19|

    au3 quelle :


    Das Login ist schon eingestellt, einfach auf LOGIN klicken.

    Erklärung :

    1 . LOGIN drücken.

    2. das Datum ist extra auf 2016 gestellt damit wir Testdaten zur Verfügung haben.

    3. Menü-Taste Datenbank laden : die selbst erstellte *lvdb datei auswählen.

    4. Dann Test AS auswählen (dort sind die meisten TEST daten vorhanden.

    Button BT4 klicken.

    Dann kann man sehen was ich vor habe.

    Funktionen um die es geht :

    _btn4_()

    _1_2_3_($sPosSplitt)

    _ArraySuche_


    Ich suche auf der aufgerufenen Seite mit der Datei : CARsucheNach.txt, nach Strings, die in der Datei mit | getrennt sind. auf dem IEhtml/Bodytext (leider funktioniert das so im oberen Beispiel nicht.(das Suchen)

    Man kann beobachten das die Zahlen oben & unten gelesen werden & dann geklickt. Das Problem bei 20 Seiten kommt '...' wenn '...' geklickt ist kommt man zur Seite 21 aber vor der 21 steht dann wieder '...' & das wird dann wieder angeklickt anstatt 22.

    Einfach mal ausführen dann kann man sehen was ich meine.

    Das ist ja nur eine Beispielseite, bei uns im Netz, suchen wir manchmal nach bestimmten Wörtern, dort kann es auch vorkommen das 1 Fahrzeug mehrere tausend Seiten am Tag hat.

    Deshalb wollte ich fragen wie man die Zahlen Trennt, weil ich erst den Quelltext geparst in einzelne Array hatte und dann 1234567891011121314151617181920... bei raus kam.


    Ich hoffe ich muss kein neuen Thread aufmachen dafür .

    Mit freundlichen Grüßen

    Mojoe

  • Deshalb wollte ich fragen wie man die Zahlen trennt, weil ich erst den Quelltext geparst in einzelne Array hatte und dann 1234567891011121314151617181920... bei raus kam.

    Um Deinen ganzen Code durchzulesen fehlt mir leider momentan die Zeit.

    Um aber die fortlaufenden Seitennummern zu erhalten, dürfte dieses Beispiel weiterhelfen :):

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • @Musashi

    |Danke hab´s mir mal angesehen, das ist leider nicht das was ich brauche oder falls doch weiß ich nicht ich das damit verknüpfen soll soll ich hab noch nicht ganz durchgeblickt ... :Face:mein Problem ist eher das nach 20 ein |...| kommt.

    es ist glaub ich nicht ganz das was ich brauche, ich habe meine Start frage völlig falsch gestellt, aber auf Grund dessen da ich noch eine andere funktionsweiße verfolgt habe.

    Nun ist es so ich ich haberausgefunden wie ich den Index des IE durchgehen kann, bzw. vorher auslesen & dann clickbytext mit einer schiefe durchlaufen lassen kann

    Ich hatte mehrere Möglichkeiten.

    Ich hab noch eine Idee aber ich geh nun schlafen.

    melde mich morgen wieder

    Trotzdem danke für den Hilfe versuch.

    Das Problem ist nur noch die Zeichen |...|...| .

    Sry ich bin zu müde ^^ ich schreibe morgen wieder.

  • .. mein Problem ist eher das nach 20 ein |...| kommt. Es ist, glaube ich, nicht ganz das, was ich brauche, ich habe meine Startfrage völlig falsch gestellt, aber auf Grund dessen da ich noch eine andere Funktionsweise verfolgt habe.

    Ja, dann war Deine Startfrage falsch gestellt :whistling:, siehe :

    Vorgabe : 123456789101112131415161718192021

    Endergebnis als Array: 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 18 - 19 - 20 - 21

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Du hast vollkommend recht. :)

    & quasi hast du meine Frage beantwortet, ich habe jetzt eine Lösung gefunden.


    Ich habe es so gelöst :


    Die einzelnen Seitenzahlen auslesen & mit IF die Bedingung gesetzt wenn = '...' dann von


    code davor :

    Ich habe erstmal _ArraySuche_ rausgenommen.

    Muss da muss ich noch schauen wie ich das hinbekomme das es auch richtig funktioniert.

    Dann die Funktion die Funktion zum auslesen geändert & zusammengefasst.

    Ergebnis :

    hatte das Fenster schon mega lange offen.. deswegen die durchgestrichenen Lienen

    Ich dachte ich hätte es gelöst und wollte grad das Ergebnis mitteilen dann hatte ich nochmal getestet & gemerkt das ich nur bis Seite 39 komme, egal wie ich ändere ich denke es liegt an UBound($aIEbodyIndexSuche)

    weil wenn er bei 1 oder 0 ankommt ist ja dann ist ja Schluss.

    Dennoch danke für eure Hilfsbereitschaft.

    ich werde morgen mal mit For & DO schleifen rumspielen keine Ahnung ob man die ineinander laufen lassen kann.

    Ich setze das Thema mal auf beendet, falls ich nicht weiter komme mache ich nochmal ein Thread auf. :)

  • Du kannst jede Schleife in einer anderen laufen lassen...man sollte nur aufpassen das es nicht zu viel wird, da du sonst enorme Verzögerungen erzeugst.

    Ich muss gestehen, ich habe immer noch nicht so wirklich verstanden, woher deine Zahlenreihen kommen und warum sie in diesem Bescheidenen Format auftreten...

  • Ich muss gestehen, ich habe immer noch nicht so wirklich verstanden, woher deine Zahlenreihen kommen und warum sie in diesem bescheidenen Format auftreten...

    Hi Moombas

    Dass auf einer Website Pagelisten angeboten werden, kennen wir ja aus z.B. dem DE- oder EN-Forum :


    Auf der Website, die MojoeB gerade verarbeitet, wird 1 2 3 4 5 6 7 8 9 10 11 im Quellcode offenbar mit 1234567891011 dargestellt. Ab einer gewissen Menge von Pages kommt dann |...| hinzu. Sein Problem ist/war? , mit diesem Element umzugehen.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Dann ist es doch immer eine fortlaufende Folge, warum nicht per Schleife (while) einfach alle zahlen 1+x durchgehen, prüfen ob diese vorkommt und wenn nicht abbrechen, sonst weiter.

    Beispiel:

    • String der Zahlen einlesen. ($Seitenzahlen)
    • ggf. '...' im String löschen (ersetzen mit '', sollten dadurch jedoch Lücken entstehen, müssten diese ggf. irgendwie gefüllt werden)
    • while $Seitenzahlen länge = 0
    • $X = 1 (Start default)
    • prüfen ob $X in $Seitenzahlen (nur ganz links und länge von X einbeziehen) Also wenn $X = 1 ist nur das erste Zeichen in $Seitenzahlen prüfen.
    • Wenn es nicht passt, ohne aktion weiter, sonst mit aktion weiter machen
    • Am Ende $x += 1 und entsprechende Anzahl Zeichen aus $Seitenzahlen ganz links löschen.

    Dadurch müsste man es durch laufen können. Theorie!

    Wenn '...' jedoch Lücken erzeugt, wird es schwerer, da man das ggf. zu Laufzeit (oder falls möglich vorher) auffüllen müsste.

    Aber der Tipp von Musashi müsste dann doch 1:1 passen. Post #5

    In Excel berechnet man das z.B. so, was dem Beispiel von Musashi entspricht:

    Mit der höchsten Seitenzahl kennst du alle Zahlen des Strings, da es ja keine Lücken gibt/geben darf.

    Einmal editiert, zuletzt von Moombas (26. Februar 2021 um 11:15)

  • @  Moombas

    ja du hast recht, es liegt an diesem Element |...|.

    Ich habe das Problem leider immer noch nicht gelöst. Leider habe ich grad nicht den Quellcode hier.

    ich kann zwar die links auf der Webseite herausfinden und dann den Index durch gehen. aber anscheint verändert sich der Index.

    Ich kann mir das Array auch irgendwie nicht anzeigen lassen. ich habe versucht mit dem autoit Tool IE_Builder2.0.1 gegenzuprüfen.

    Wenn ich mich jetzt nicht Irre war der letzte Index immer auf 63 & das war das letzte |...| auf der Seite & wird im Link auf bsp mit der 21 .. 41 angezeigt.

    Erklärung :

    Die reihenfolge ist so : 1 | 2 |3 bis 20 | ... |

    Sobald Index |...| gedrückt würd, geht die neue Seite auf |...|21|22|23 bis 40|...|

    Das klappt auch aber, das Problem ist nicht direkt das durchgehen mit einer schleife es ist das nach 20 ... gedrückt wird aber der nächste index wieder ... ist, weil 21 gedrückt ist & er somit wieder auf die ... drückt & wieder auf auf die Seite 1 - 20 zurückspringt.

    Idee 1 :

    _IEClickbytext For schleif 1-500

    Wenn @error dann _IEClickbytext($ie, '...')

    Idee 2

    Wenn @error dann _IEclickbyindex ($ie, 63, 1)

    Verschiedene Szenarien wurden beim rumtesten beobachtet:

    1. entweder findet er nicht den IEindex 63

    2. oder er klickt auf den falschen Link manchmal aufs Impressum, manchmal wieder zurück zu Seite 1 - 20


    & ich habe versucht mit _IENavigate zum Seiten link zu navigieren geht leider auch nicht da der link so aussieht : javascript: .... ..... ... ('....$page21') | ich weiß grad nicht genau wie der link heißt er ist auf jeden fall so aufgebaut.


    quellcode nur als beispiel für das sammeln der links.

  • Achso, also steuerst du das direkt?

    Ich dachte du hast das in einer Datei. Dann war ich wohl vom ersten Beitrag/Fragestellung noch auf dem falschen Dampfer.

  • Hay ich wollte euch mal das Ergebnis zeigen, hatte mehre Varianten, und am ende muss ich die Zahlen Garnichts trennen weil diese schon in einem Array gespeichert werden :).

    Das ist mein Ergebnis, es kann sein das #includes fehlen, da ich diese in meinem Hauptscript habe.

    Das Script geht nun alle Seitenzahlen durch bis es ein Schlüsselwort gefunden hat dann schaltet sich dann auf

    Code
    $oGefunden = 1

    Dies bewirkt in der hauptschleife des hausscriptes das die schleife beendet wird.

    Lasst euch nicht von den Kommentaren stören. Es kann auch etwas falsch aufgefasst sein.

  • Hi MojoeB sorry, ich bin nur mal reingeschneit und habe dein letztes Skript gesehen. Zum Topic kann ich gar nichts sagen. Aber vermeide doch so Spielereien: Func ________START_________() Das bereitet doch nur bei Aufruf mögliche Schmerzen. Genau wie das ____suche__starten___().Haben die Namen funktionale Gründe? ;)

    Außerdem scheinen alle globalen Variablen nur lokal genutzt zu werden? Dann deklariere sie dort doch auch lokal.

    Schreibst du deinen Code in Notepad++ oder so? Ich frage wegen der eigenwilligen Einrückungen und unterschiedlichen Schreibweise von func und EndFunc. Probiere mal SciTE4AutoIt oder ISN Studio aus.

    Die nehmen eine Menge Arbeit ab.

    Grüße autoiter

  • im Haupt Script werden die variablen genutzt noch nicht alle aber das ändere ich noch. :)


    jain hat es schon, im hauptscript schleife habe ich
    in While schleife stehen.
    ________START_________()


    & in dem such include halt

    _Suche_finde_() kommt davor halt weil seite 1 ja schon aufgerufen ist und schon durchsucht werden kann.

    ____suche__starten___() ich weiß einfach nicht wie ich es benennen sollte ^^

    Edit;

    SciTE4AutoIt benutze ich, auf arbeit nur eine ältere Version von SciTE4AutoIt3_Portable.zip kann jetzt gard aber nicht sagen welche genau.

    ISN Studio kann ich nicht benutzen auf Arbeit, aber hatte es getestet ist nicht schlecht aber beim rumtesten ist mir das Programm zu oft abgestürzt.

    Wahrscheinlich hätte ich da von Grund auf neu Coden müssen, direkt in ISN Studio damit diese abstürze nicht geschehen.

    2 Mal editiert, zuletzt von MojoeB (21. Juni 2021 um 19:36)

  • MojoeB Wegen der Namen war gemeint das ein START() reichen würde anstatt ________START_________() Weil das die Aufrufe nur verkompliziert und unnötig lang macht. Füge in solchen Fällen lieber eine Kommentarzeile darüber ein.

    Generell solltest du deinen Programmierstil etwas überdenken. innerhalb einer Func() deklariert man keine globalen Variablen, nur Lokale! Nu ein Beispiel.

  • Ein guter Einstieg zu einem guten Programmierstil ist folgender Artikel im engl. AutoIt-Wiki.