Verschiedene Textdateien lesen und richtig in einem neuen Textdatei einbinden

  • Hallo,

    wie bekomme ich es denn hin, aus vier verschiedenen Textdateien, bestimmte Werte zu lesen und in einem neuen Textdatei sie wiederzugeben?

    Sprich, in dem "Haupt-Textdatei stehen folgende Angaben:

    ID:
    Name:
    Alter:
    Wohnort:
    Adresse:
    Funktion:

    Im Textdatei Nummer eins:
    (1. Zeile) 001
    (2. Zeile) 002
    (3. Zeile) 003

    Im Textdatei Nummer zwei:
    (1. Zeile) Markus
    (2. Zeile) Florian
    (3. Zeile) Thomas

    Textdatei drei:
    (1. Zeile) 17
    (2. Zeile) 20
    (3. Zeile)19

    Nummer vier:
    (1. Zeile) Köln
    (2. Zeile) Köln
    (3. Zeile) Stuttgart

    Nummer fünf:
    (1. Zeile) Hamburger Straße 34
    (2. Zeile) Mittlerer-Bürger Straße 21 - 23
    (3. Zeile) Berliner-Straße 2

    Nummer sechs:
    (1. Zeile) BBK
    (2. Zeile) ZBK
    (3. Zeile) BBK

    Es soll im endeffekt wie folgt aussehen im "Haupttextdatei:

    Spoiler anzeigen

    ID:
    Name: xxx
    Alter: xxx
    Wohnort: xxx
    Adresse: xxx
    Funktion:

    ID: xx
    Name: xxx
    Alter: xxx
    Wohnort: xxx
    Adresse: xxx
    Funktion: xxx

    ID: xxx
    Name: xxx
    Alter: xxx
    Wohnort: xxx
    Adresse: xxx
    Funktion: xxx

    Für jede "ID" im ersten Textdatei, soll also eine neue Datenabfrage (ID, Name, Alter etc.) geschrieben werden.

    Ich hoffe, ich habe mich deutlich ausgedrückt, wenn noch Fragen da sind, dann beantworte ich sie :S
    Mit FileRead und FileWrite weiß ich nicht, wie ich sie einzubinden habe.

    Einmal editiert, zuletzt von Hikonia (16. Oktober 2011 um 14:14)

  • Am besten wäre es in dem Fall mit einer .ii datei, da es immer einen Schlüssel (key) gibt und einen Wert (value) des Schlüssels (Name=Wert)

    du erstellst einfach ein oder mehrere Arrays in denen du die Namen, Adresse etc ausließt und schreibst am Ende in einer For Schleife alle in eine .ini Datei.

    Schau dir dafür mal

    [autoit]

    IniWrite()
    IniWriteSection()
    IniRead()
    IniReadSection()

    [/autoit]


    an, und die anderen .ini Funktionen (Schau dafür in der Hilfe)

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • Ich nehme mal an, dass die Datensätze bereits existieren (andernfalls: arbeite mit SQL oder Ini-Dateien).

    Hier ist ein getesteter Code [main.txt, Nr1.txt - Nr6.txt müssen im selben Ordner liegen]:

    Spoiler anzeigen
    [autoit]

    #include <File.au3>

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

    ;Annahme: Datei main.txt, Nr1.txt - Nr6.txt existieren und sind mit Datensätzen gefüllt

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

    $aBezeichner = StringSplit(StringStripCR(FileRead("main.txt")), @LF) ; Speichert die 6 Bezeichner (ID, Name, ...)

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

    If Not IsArray($aBezeichner) Then
    MsgBox(0, "Error main.txt", "Offensichtlich ist die main.txt im falschen Format!")
    Exit
    EndIf

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

    $sAusgabe = "" ; Speicher für die Ausgabe

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

    $iAnzahlEintraege = _FileCountLines("Nr1.txt")
    ; Annahme hier: Jede Datei enthält die selbe Anzahl an Einträgen!

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

    For $i = 1 To $iAnzahlEintraege ; über alle Datensätze (= Einträge in der NrX.txt)
    For $k = 1 To $aBezeichner[0] ; über alle Bezeichner (= ID, Name, ...)
    $sAusgabe &= $aBezeichner[$k] & FileReadLine("Nr" & $k & ".txt", $i) & @CRLF
    Next
    If $i < $iAnzahlEintraege Then $sAusgabe &= @CRLF
    ; hängt den Zeilenumbruch beim letzten Eintrag nicht dran
    Next

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

    MsgBox(0, "Ergebnis:", $sAusgabe)

    [/autoit]


    PS: Mögliche Fehlerquellen musst du selber beheben (z.B. Nr1.txt enthält 10 Zeilen, Nr2.txt aber nur 9).
    Das komplette Packet als .zip:

  • Hallo,

    vielen dank. Das war das, wonach ich suchte. Wie bekomme ich es denn dann hin, das Gesamtergebnis in einem neuen Textdatei (.txt) wiederzugeben, statt in einem Fenster?

  • Schreib statt:
    'MsgBox(0, "Ergebnis:", $sAusgabe)' [Zeile 25]
    Filewrite("Dateiname.txt",$sAusgabe)

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Schreib statt:
    'MsgBox(0, "Ergebnis:", $sAusgabe)' [Zeile 25]
    Filewrite("Dateiname.txt",$sAusgabe)


    Hallo,

    ich wollte gerade schreiben, dass ich das selber hinbekommen habe, und zwar durch genau diese Zeile.
    Ich bedanke mich aber für deine großartige Hilfe :) Ich wäre niemals weitergekommen. Vielen dank!

  • Kein Problem :)
    Folgendes für die Zukunft:
    Wenn du Hilfe (<=> kein fertig geschriebenes Script) brauchst,
    dann solltest du einen Ansatz (im AutoIt Tag + ggf. Spoiler :P ) posten.
    Solltest du allerdings (warum auch immer) ein
    Problem - komplett gelöst - bekommen wollen, dann solltest du es nicht
    unter 'Hilfe und Unterstützung', sondern unter 'Programmieranfragen'
    veröffentlichen. ;)

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!