2d-Array

  • Hallo.

    Ich habe eine Datei mit 37 Reihen 'a jeweils genau 37 Zahlen/Buchstaben/Zeichen.

    Wie kann ich diese in ein "D-Array" nutzen. Am liebsten wäre es mir, wenn ich die Datei nicht mehr benötigen würde, sondern diese direkt mit ins Script "aufnehmen" könnte, bevor ich dieses compaliere. Wenn es nicht geht, das ich diese Datei mit "aufnehme", dann ist das nicht ganz so schlimm, wobei ich dann diese Datei codieren müßte (no Problemo) und vor dem nutzen na klar wieder decodieren müßte, was mir aber klar ist.
    Leider sind die 37 Zahlen/Buchstaben/Zeichen nicht durch irgend ein Zeichen getrennt, was sonst nämlich für mich kein problem wäre. Aber da später einmal mehr als 30 solche Dateien (jeweils aber nur eine pro Script) zur Verfügung stehen werden, würde ich das ganze Problem so leicht es geht lösen.

    Ich bin gespannt und frohes Ostereier suchen. ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Hallo Alina,
    warum nimmst du nicht einfach mit StringLeft ein Zeichen nach dem anderen aus dem dekodierden Textstring, schreibst den Rest mit StringRight zurück, das ganze in einer Schleife bis alle Zeichen ausgelesen sind. Sieht programmtechnisch zwar nicht schön aus, aber wenn dir keine bessere Lösung einfällt, sollte das reichen.

    PS.: ich hab mitbekmmen das du eine Art Archiv für deine Skripte suchst schau dir dazu mal dies an.

    Edit1: Link korrigiert

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (12. April 2009 um 08:10)

    • Offizieller Beitrag

    Hallo Alina!
    Enthält Deine Datei keinerlei Zeilenumbrüche?

    Wenn doch, dann kannst Du die anhand des Zeilenumbruchs aufsplitten und in ein Array übernehmen:

    [autoit]


    #include <Array.au3>
    $sData = FileRead(@ScriptDir & '\daten.txt')
    $array = StringSplit($sData, @CRLF, 3)
    _ArrayDisplay($array)

    [/autoit]

    Wenn die ganzen Daten tatsächlich hintereinander stehen (ohne @CRLF), dann aufsplitten anhand der 37 Zeichen:

    [autoit]


    #include <Array.au3>
    $sData = FileRead(@ScriptDir & '\daten.txt')
    $array = StringRegExp($sData, '.{37}', 3)
    _ArrayDisplay($array)

    [/autoit]

    Zum Thema "keine Datei, Array im Script": Dazu müsstest Du das Array irgendwo am Anfang (vor der Benutzung) deklarieren und ihm die Werte zuweisen:

    [autoit]


    Global $array[37] = ['MGZIGNYTTXTTNODKPOLUUVFTPTOABUFIPEESF', 'TOWPXZRXOPNRTRMEIBWGXJWARVNXWYRXQFIJG', 'FIOYOYHVSCAFVRUZMSJUORHZVFFUOIFTFQSGP', 'SWQGUFFEXMHPQMYDCQSIKALDKWERGGOMSXUQV', 'QRJIHGFLWRGVHKGISANGUHTKTVHPJDCBIGEMN', 'YSQIPAGFZSDUQRDTONEMGWBGOYZITHGZFIOLN', 'MRTEKOERVUMYZCJUQFHXISPBVOKBEQZEKHZAO', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']

    [/autoit]


    So bräuchtest Du keine Datei. Ist allerdings recht mühsam das alles einzutragen.

    • Offizieller Beitrag

    So bräuchtest Du keine Datei. Ist allerdings recht mühsam das alles einzutragen.

    Da der Text ja bereits als Datei vorliegt, brauchst du nur einmalig das $array erstellen, wie von Oscar beschrieben.
    Und hiermit ist es dann auch keine Schreibarbeit mehr, daraus das dauerhafte Array für das Skript zu erstellen.
    Ausführen und dann die Consolenausgabe in dein Skript einfügen. ;)

    [autoit]

    $strDeklaration = "Global $array[37] = [ _" & @CRLF
    For $i = 0 To UBound($array) -1
    $strDeklaration &= "'" & $array[$i] & "', _" & @CRLF
    Next
    $strDeklaration = StringTrimRight($strDeklaration, 4) & "]"
    ConsoleWrite($strDeklaration & @CRLF)

    [/autoit]
  • Hallo Ihr beiden süßen Osterhasen ;)

    Oscar :
    Alles drei arbeitet einwandsfrei mit einer Test-Datei.

    @Bug-Fix:
    Also wie ich das nun anwende, da blicke ich nicht durch.
    Woher weiß Dein Array-Script denn aus welcher Datei er sich die Daten nehmen soll?

    Bug? Habe ich schon zu viele Ostereier (die vom Huhn) gegessen?

    Testdatei: autoit.de/wcf/attachment/4373/

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Hi Leute.
    Das Script von BugFix sieht interessant aus. Nur zu der Frage von Alina kommt von mir noch eine dazu.
    Wie deklarierst du denn die Global $array[37] ???

    Das ist mir irgendwie auch net so klar.

    MfG
    Der_Doc

  • Der_Doc
    Ist das nicht das was ich geschrieben habe?
    Ich weiß auch nicht wie er die Arrays deklariert, denn ich suche den bezug zur Datei, wo die Daten drinne stehen.

    Sicherlich hat Bug-Fix nur einen kleinen Bug in seinem Beitrag (nicht im Sourcecode) und erklärt es uns.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    • Offizieller Beitrag

    Hallo,

    Alina schreib einfach noch

    [autoit]

    $array = StringSplit(FileRead("<Dateiname>"),@CRLF,3)

    [/autoit]

    vor den Code von BugFix und ersetze <Dateinamen> durch den Dateinamen der Datei dann sollte es gehen.

    Edit:
    die Zeile 5 in BugFix Code enthält noch einen kleine Fehler, die 4 muss durch eine 5 ersetzt werden.

  • bernd670


    die Zeile 5 in BugFix Code enthält noch einen kleine Fehler, die 4 muss durch eine 5 ersetzt werden.


    Stimmt: 2 x Leerzeichen, 2 x Komma und 1 x Unterstrich


    @all:
    Okay, das geht.
    Dann benötige ich zwar immer noch die Datei nach dem compilieren, aber damit das nicht nötig ist werde ich mit Copy & Past das einfügen was Bug's Script ausgibt.

    Danke an Euch !!!

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    Einmal editiert, zuletzt von Alina (12. April 2009 um 12:33)

    • Offizieller Beitrag

    Und hiermit ist es dann auch keine Schreibarbeit mehr, daraus das dauerhafte Array für das Skript zu erstellen.
    Ausführen und dann die Consolenausgabe in dein Skript einfügen.

    So war es von BugFix auch geacht. ;)

  • ich habe nun das Array[17] aufgerufen und es schaut so aus: tuvwxyz0123456789abcdefghijklmnopqrs.

    Wie bekomme ich davon wiederum den Buchstaben "f" ausgelesen?

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • StringInStr nach f suchen , ist pos 23 und dann mit stringmid die 23, 1 ist f.

    Wert:

    Spoiler anzeigen
    [autoit]

    $var = "tuvwxyz0123456789abcdefghijklmnopqrs"
    $var = StringMid($var,23,1)
    MsgBox(0,"",$var)

    [/autoit]


    Position:

    Spoiler anzeigen
    [autoit]

    $var = "tuvwxyz0123456789abcdefghijklmnopqrs"
    $var = StringInStr($var,"f")
    MsgBox(0,"",$var)

    [/autoit]


    Nur es bringt dir doch net so viel oder?

    MfG
    Der_Doc

    3 Mal editiert, zuletzt von Der_Doc (12. April 2009 um 13:02)

    • Offizieller Beitrag

    Hallo,

    es kommt jetzt darauf an was du genau willst, hast du die Position und willst wissen was dort für ein Buchstabe/Zeichen/Zahl steht oder hast du ein Buchstaben/Zeichen/Zahl und willst wissen an welcher Positon es steht.

  • bernd670
    Beides wäre gut zu wissen (Lerneneffekt).

    Der_Doc
    Hatte ich auch schon versucht, aber leider nicht hinbekommen. Aber ich schaue mir das heute Abend mal an. ich soll gleich erst einmal bischen frische Luft tanken, auch wenn meine fenster seit drei Tagen daheim überall offen sind.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • So ist mein Problem nun gelöst:

    Spoiler anzeigen
    [autoit]

    Global $array[3] = ['MGZIGNYTTXTTNODKPOLUUVFTPTOABUFIPEESF', 'TOWPXZRXOPNRTRMFIBWGXJWARVNXWYRXQFIJG', 'FIOYOYHVSCAFVRUZMSJUORHZVFFUOIFTFQSGP']
    MsgBox(0,"Box 3", $array[1])

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

    ;Wert aus einem Array lesen: 23 = W
    $var = $array[1]
    $var = StringMid($var,23,1)
    MsgBox(0,"",$var)

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

    ;Wert-Position aus Array lesen: f = 16 und 34
    $var = $array[1]
    $var1 = StringInStr($var,"f",0,1)
    $var2 = StringInStr($var,"f",0,2)
    $var3 = StringInStr($var,"f",0,3) ; Ausgabe 0, da f nur 2x vorhanden ist.
    MsgBox(0,"",$var1 & " und " & $var3)

    [/autoit]

    Frage von Der_Doc: Nur es bringt dir doch net so viel oder?
    Antwort: Doch. Ich will ja aus dem betreffenden Array einen Buchstaben ecvtl. mal auslesen oder wissen wo ein bestimmter Buchstabe ist.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr