viele Texte speichern

  • Guten Morgen zusammen,

    ich weiß diese Überschrift ist etwas dürftig, aber ich schildere mal das Problem.
    Beispiel:
    50 Quelltexte, 50 Dateien, 50 inis...
    Alles in eine ini geht ja nicht.
    Ich möchte, um den Überblick zu behalten
    keine 200 Dateien verknüpfen.

    Ihr kennt ja Clipget().
    Meine Frage:
    Kann man irgendwie einen Text im Code ähnlich wie Clipget speichern?
    Dann könnte ich vielleicht eine Funktion mit allen Quelltexten machen...

    $Page1 = (das
    wäre der Quelltext
    mit Seitenumbruch......)

    Habt Ihr da eine Idee, wie man das am besten hinkriegt,
    ohne einzelne inis, Pfade, Quelltexte...?

    Liebe Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (28. April 2011 um 12:49)

  • Hallo Ilse ;)
    ich würde dir wiedermal Arrays empfehlen ;)
    1 oder mehrdimensional, wie du es halt möchtest, da isses am einfachsten die wieder rauszulesen.

  • Hallo TheLuBu,

    konnte mich jetzt erst wieder melden.
    Arrays für später ja, aber ich erkläre dir mal wie ich vorgehe:

    1. Ich besuche eine Seite und hole mir den Quellcode
    2. Diesen Quellcode bearbeite ich mit Scite
    3. ich bearbeite den 2. Quellcode, 3. usw.

    So, wie kann ich den jeweiligen Quellcode für später in einer Datei speichern und abrufen
    ohne quellcode1.txt, quellcode2.txt (die könnte ich ja dann als array einlesen)

    Kann man das nicht wie bei einer ini lösen?

    [autoit]


    [Quellcode1]
    .....
    [Quellcode2]
    ....

    [/autoit]

    Oder kannst du mir die Vorgehensweise mit Arrays kurz erklären.

    Liebe Grüße
    Ilse ;)

  • Du könntest natürlich alle Quellcodes in eine Datei werfen und dann zwischen jedem Quellcode ein eindeutiges Trennzeichen setzen, also z.B.

    Code
    Quelltext1 bla blabla
    TheLuBuAutoit2011
    Quelltext2 bla bla bla bla
    TheLuBuAutoit2011
    Quelltext3 bla bla bla bla
    TheLuBuAutoit2011
    ....

    Diese Datei dann einfach später einlesen und mit

    [autoit]

    Stringsplit($Dateiinhalt, "TheLuBuAutoit2011", 1)

    [/autoit]


    in ein Array einlesen.

    Dabei ist wichtig, das der Text ( TheLuBuAutoit2011) nicht im Quelltext vorkommt und du bei Stringsplit hinten den parameter = 1 setzt, um den gesamten String als Trennzeichen zu nutzen

  • merci für die Tipps,
    werd ich gleich probieren.

    Eine Frage noch vorab:

    Wenn ich in dieser "Datei" alle Quelltexte drin habe,
    getrennt mit (meinem Trennzeichen)
    wie kann ich dann gezielt auf einen bestimmten Quelltext zugreifen.

    Beispiel:

    [autoit]


    [Quelltext Hunde]
    ...
    ...
    (MeinTRENNZEICHEN)
    [Quelltext Katzen]
    ...
    ...
    (MeinTRENNZEICHEN)

    [/autoit]

    brr die Arrays mir schlockern schon wieder meine Knie...!

    Liebe Grüße
    Ilse ;)

  • Kannst du dann mit

    [autoit]


    For $i = 0 To Ubound($avArray) - 1
    If StringinStr($avArray[$i], "Hunde") Then
    Msgbox (0, "", "Quelltext Hunde gefunden")
    ElseIf StringinStr($avArray[$i], "Katzen") Then
    Msgbox (0, "", "Quelltext Katzen gefunden")

    [/autoit]

    Alternativ kannst du auch in der Quelltextdatei, wo alles zusammen gelegt ist,
    Das hier eintragen

    Code
    (MeinTRENNZEICHEN)
    Katzen
    (MeinTRENNZEICHEN)
    [Quelltext Katzen]
    (MeinTRENNZEICHEN)
    Hunde
    (MeinTRENNZEICHEN)
    [Quelltext Hunde]

    Wenn du das dann mit

    [autoit]

    Stringsplit()

    [/autoit]

    trennst, kannst du
    Wieder in ner Schleife durchgehen

    [autoit]


    For $i = 0 To Ubound($avArray) - 1
    If $avArray[$i] = "Hunde" Then
    Msgbox (0, "", "Quelltext Hunde gefunden in Arrayplatz "& $i + 1)
    ElseIf $avArray[$i] = "Katzen" Then
    Msgbox (0, "", "Quelltext Katzen gefunden in Arrayplatz "& $i + 1)

    [/autoit]
  • Nimm doch einfach eine ini-Datei (wie Du selber schon schriebst).

    Code
    [seite 1]Quellcode=...[seite 2]Quellcode=...


    Die Sections (hier: seite 1, seite 2) benennst Du sinnvoll.
    Diese könntest Du zum Beispiel dann mit IniReadSectionNames() auslesen und in eine ComboBox einfügen.
    Über diese kannst Du dann die gewünschte Section auswählen und dir den Quellcode mit IniRead(Pfad, Section, "Quellcode", Default) ausgeben lassen.

    Geht doch nicht, siehe nächste zwei Posts.

    2 Mal editiert, zuletzt von _DICE_ (27. April 2011 um 12:32)

  • @ TheLuBu @Dice
    Super, ich werde alles mal probieren.
    Danke für die Tipps und Erklärungen.


    Ich melde mich wieder,
    ...kann aber etwas dauern
    fang sofort an!

    Liebe Grüße
    Ilse ;)

  • Nimm doch einfach eine ini-Datei (wie Du selber schon schriebst).

    Code
    [seite 1]
    Quellcode=...
    [seite 2]
    Quellcode=...

    Die Sections (hier: seite 1, seite 2) benennst Du sinnvoll.
    Diese könntest Du zum Beispiel dann mit IniReadSectionNames() auslesen und in eine ComboBox einfügen.
    Über diese kannst Du dann die gewünschte Section auswählen und dir den Quellcode mit IniRead(Pfad, Section, "Quellcode", Default) ausgeben lassen.

    Das Problem an der Inidatei ist, das sie standartisiert ist.
    Kommt im Quelltext " vor, =, oder ähnliches, kann der Wert falsch interpretiert werden (muss nicht, kann aber), und du hast auf einmal eine Section Quellcode und eine weitere. Bei der Stringsplit Methode kann man sich einen Trennstring ausdenken, der nicht in dem Quelltext vorkommt. Bei einem Buchstaben- und Zahlensalat mit 18 stellen z.B ist die Wahrscheinlichkeit sehr gering, das genau dieser eine Wert vorkommt (siehe auch Passwortsicherheit), bei der inidatei ist es ein Zeichen ( = ) und es könnte falsch interpretiert werden.

  • Ups, da hast Du recht.
    Ich habe das gerade selbst nochmal getestet, weil ich bisher nie Probleme damit hatte (hatte aber auch noch Quellcodes in einer ini-Datei). Spätestens nach einem > oder einem Zeilenumbruch wird der Wert gekappt. Wobei ich komischerweise mal die komplette erste Zeile bekomme und mal eben nur den Teil bis zum ersten >.

    Unter dem Umständen ist deine Idee mit einem speziellen "Trennstring" doch besser.

  • Also,
    ich habe mal die ini probiert. Die Arrays probier ich auch noch.

    Die INI

    Ich kann zwar die Sektionen auslesen, aber nicht die mehrzeiligen Texte!

    [autoit]


    $Var = IniReadSectionNames(@ScriptDir & "\" & "Texte.ini")

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

    If @error Then
    MsgBox(4096, "", "Keine Textdatei gefunden.")
    Else
    For $i = 1 To $var[0]
    MsgBox(4096, "Loop", $var[$i])
    $code = IniRead($Var, $var[$i], "Quelltext", Default)
    MsgBox(4096, "Code", $code) ; Die Msgbox gibt Default an.
    Next
    EndIf

    [/autoit]

    Die Ini mit Quelltext sieht so aus:

    [autoit]


    [Seite1] ;Diese Sektion wird im Loop angezeigt!
    Quelltext=hier steht
    mein Text mit
    Umbrüchen...
    [Seite2]
    Quelltext=hier steht
    mein 2.Text mit
    Umbrüchen...

    [/autoit]


    Grüße
    Ilse ;)

  • TheLuBu

    ich hab's geahnt,
    Arrays bedeuten bei mir nichts gutes!

    Es klappt mal wieder nicht!

    [autoit]


    #include <Array.au3>
    #include <String.au3>

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

    Dim $avArray
    $Var = (@ScriptDir & "\" & "Quelltexte.txt") ; Hier stehen alle Texte drin!
    MsgBox(4096, "Code", $Var) ; Pfad wird angezeigt!

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

    $avArray = Stringsplit($Var, "TheLuBuAutoit2011", 1) ; habe mal das als Trennzeichen im Text verwendet!
    MsgBox(4096, "Code", $avArray) ; Hier wird der Text nicht gezeigt!

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

    For $i = 0 To Ubound($avArray) - 1
    If $avArray[$i] = "Hunde" Then
    Msgbox (0, "", "Quelltext Hunde gefunden in Arrayplatz "& $i + 1)
    ElseIf $avArray[$i] = "Katzen" Then
    Msgbox (0, "", "Quelltext Katzen gefunden in Arrayplatz "& $i + 1)
    EndIf
    next

    [/autoit]

    Quelltexte.txt sieht so aus:

    [autoit]


    [Hunde]
    TheLuBuAutoit2011
    <div class="tt_for4wrapper">
    <p class="tt_for4Box1Headline">
    TheLuBuAutoit2011
    [Katzen]
    TheLuBuAutoit2011
    <div class="tt_for4wrapper">
    <p class="tt_for4Box1Headline">
    TheLuBuAutoit2011

    [/autoit]


    Liebe Grüße
    Ilse ;)

  • Wirf nen Blick auf deinen Aufkleber den du dir an den Monitor pappen solltest. Arrays kann man nicht in einer msgbox ausgeben, nur einzelne Array Felder und diese Adressiert man mit einem Index. Um Arrays komplett auszugeben verwendet man _arrayDisplay.

  • Ilse
    Ich weiß nicht ob es dir hilft, aber stell dir ein Array als eine Exceltabelle vor.
    In jeder Zelle der Tabelle steht ein Wert, in diesem Fall die Quellcodes.

    Wenn du nun $Avarray alleine nimmst, hast du die gesamte Tabelle.
    Wenn du aber nur einen Wert aus der Tabelle haben willst, z.B. den Quelltext 1,
    musst du ja erstmal die "Zelle" auswählen, das machst du eben mit den Klammern [1]
    In der MsgBox oben hast du also die gesamte Tabelle ausgewählt, nicht einen Wert aus der Tabelle.

    Wenn es dir hilft, wenn du weißt, das du mit arrays arbeitest, benutz einfach

    [autoit]

    _arrayDisplay()

    [/autoit]

    Deine Tabelle( Array) sieht also so aus

    Code
    Zeile 1: [Hunde]
    Zeile 2: <div class="tt_for4wrapper">
                <p class="tt_for4Box1Headline">
    Zeile 3: [Katzen]
    Zeile 4:        <div class="tt_for4wrapper">
                <p class="tt_for4Box1Headline">
    Zeile 5:


    Der 5te Wert ist dabei leer, da hinter dem trennzeichen nix steht

  • [autoit]


    #include <Array.au3>
    #include <String.au3>
    Dim $avArray
    $Var = (@ScriptDir & "\" & "Quelltexte.txt") ; Hier stehen alle Texte drin!
    MsgBox(4096, "Code", $Var) ; Pfad wird angezeigt!

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

    $inhalt = FileRead($var) ;Erst Datei einlesen

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

    $avArray = Stringsplit($inhalt, "TheLuBuAutoit2011", 1) ; habe mal das als Trennzeichen im Text verwendet! Dann den Inhalt splitten und nicht den Dateipfad
    _ArrayDisplay($avArray) ;zeigt das Array an

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

    ;MsgBox gelöscht, weil sinnlos

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

    For $i = 0 To Ubound($avArray) - 1
    If $avArray[$i] = "Hunde" Then
    Msgbox (0, "", "Quelltext Hunde gefunden in Arrayplatz "& $i + 1)
    ElseIf $avArray[$i] = "Katzen" Then
    Msgbox (0, "", "Quelltext Katzen gefunden in Arrayplatz "& $i + 1)
    EndIf
    Next

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


    Sollte so gehen.

  • Was ich bei den Arrays irgendwie nicht verstanden habe ist folgendes:

    1. Man muß doch am Anfang das Array dimensionieren!
    Also soviele Zeilen, soviele Spalten...

    Da weiß ich nie was ich tun soll. D.h. mein erstes Problem habe
    ich also schon am Anfang bevor's richtig los geht!
    Dim $MeinArray??
    (Text in Array einlesen)
    Vergleiche ich es mit Excel, dann kann ich den Text
    in eine Zelle einlesen.

    Ich kenne vorher z.B. nicht die Anzahl der Zeilen, Spalten...
    Ich weiß es gibt uBound, aber hat das grundsätzlich
    was mit der Dimensionierung zu tun?

    Bin ehrlich, hab's halt noch nicht 100% verstanden.

    Ich lese, lese, lese mir also nochmals alles durch. :huh:

    Liebe Grüße
    Ilse ;)

  • Stringsplit und auch _filereadtoarray kümmern sich selbst um die richtige Dimensionierung des Arrays. Bei stringsplit musst du die Variable nichtmal deklarieren, bei filereadtoarray hingegen schon, weil du dort die Variable als Parameter übergeben musst. Dabei ist es aber egal ob du die Variable als Array deklarierst oder nicht, das erledigt die Funktion selbst, sie benötigt nur einen Variablennamen und überschreibt deren Inhalt.

    Wenn du hingegen eigene Arrays erstellst musst du zunächst die Dimensionen festlegen. Wenn dir diese nicht bekannt sind kannst du die kleinstemögliche Dimension wählen also z.B. local array[1] und dieses Array in deiner funktion die es befüllt dynamisch vergrößern. Dazu gibt es die z.B. die Funktion arrayadd. Alternativ kann man das was Arrayadd macht auch selbst realisieren, denn es wir nur ein neues temp. Array deklariert welches um ein Feld größer als das alte ist, dann wird der inhalt kopiert und der neue Inhalt hinzugefügt, im Anschluss wird die alte Array Variable überschrieben und ist dadurch dann um 1 Feld größer.

    Je nach Fall kannst du die Array Dimension aber auch bereits zu Anfang korrekt und Fallabhängig ermitteln. Wenn du z.B. eine Textdatei einlesen willst kannst du zunächst mit filecountlines die Zeilen ermitteln und dann das Array so deklarieren:

    local array[$zeilenanzahlvoncountlines+1] ; Array ist ein Feld größer als Die Zeilenanzahl

    So hast du immer eine korrekte Arraygröße, auch wenn die Zeilenanzahl von Datei zu Datei variert. Im Anschluss würdest du dann mit filereadline in einer for schleife jedes Array Feld Zeile für Zeile befüllen, das ist in etwas das was in der Funktion _filereadtoArray automatisch gemacht wird.

  • Du kannst ja ein Array auch variabel deklarieren.
    Zum Beispiel liest du erst die Anzahl von Zeilen in einem Text mit

    [autoit]

    _FileCountLines()

    [/autoit]


    ein, damit hast du ja schonmal die Anzahl der Zeilen.
    Für Spalten ist es dann ähnlich.

    Ein Array kannst du also auch so deklarieren :

    [autoit]


    $Zeilen = _FileCountLines($Testdatei)
    Local $avarray [$Zeilen]

    [/autoit]