Microsoft Excel

Herbers Excel/VBA-Archiv

Text in txt-Datei per Makro einfügen

Betrifft: Text in txt-Datei per Makro einfügen von: Stefan
Geschrieben am: 12.10.2007 12:31:52

Hallo liebe Excel Gemeinde,

ich hoffe, es kann mir jemand bei meinem folgenden Problem helfen.

Ich habe eine txt-Datei mit einigen hundert Zeilen. Jede Zeile beginnt entweder mit 10 oder 20 und besteht aus Daten, die an der vorhandenen Stelle verbleiben müssen, sowie aus Leerzeichen, die ebenso an der vorhandenen Stelle verbleiben müssen.

Ich möchte nun in jeder Zeile, die mit 10 beginnt, drei Leerzeichen (z.B. die Stellen 128-130) durch einen festen Eintrag ersetzen (XYZ). Wiei gesagt, nur bei den Zeilen, die mit 10 beginnen.

Hat da jemand eine Lösung für mich?

Vielen Dank schonmal für´s Lesen und bis hoffentlich bald.

Stefan

  

Betrifft: 3 Zeichen in Textdatei ändern von: NoNet
Geschrieben am: 12.10.2007 13:27:56

Hallo Stefan,

leider gibt es für sequentielle Dateien (also auch Text-Dateien) mit unterschiedlicher Zeilenlänge keine Möglichkeit, eien Änderung direkt an einer definierten Stelle vorzunehmen. Daher hilft wohl nur, die Datei zeilenweise auszulesen, die ersten beiden Zeichen jeder Zeile zu prüfen und ggf. zu ändern und die Zeile in eine TEMPORÄRE Datei zu schreiben und die Originaldatei letztendlich durch diese TEMP-Datei zu erstzen.

Genau DIES macht das folgende Makro :

Sub ZeilenMit10Aendern()
    '12.10.2007, NoNet
    Dim Datei, Temp, Text, AnzStelle, Stelle, Zeile
    Datei = "C:\Temp\Daten10oder20.txt" 'Name der Textdatei
    Temp = Datei & ".tmp" 'Temporäre Datei

    Stelle = 128  'Ab Stelle 128
    AnzStelle = 3 '3 Zeichen ersetzen
    Text = "XYZ"  'Der Text, der eingefügt werden soll

    Open Datei For Input As 1 'Textdatei zum Lesen öffnen
    Open Temp For Output As 2 'TEMP-Datei zum Schreiben öffnen
    While Not EOF(1)
        Line Input #1, Zeile  'Zeile einlesen
        If Left(Zeile, 2) = "10" Then 'Wenn Zeile mit "10" beginnt
            Zeile = Left(Zeile, Stelle - 1) & Text & Mid(Zeile, Stelle - 1 + AnzStellen, Len(Zeile))
        End If
        Print #2, Zeile 'Zeile in TEMP-Datei schreiben
    Wend
    Close 'Alle Dateien schließen
    'ACHTUNG : Hier wird die TEXTDATEI gelöscht und durch die TEMPORÄRE Datei ersetzt :
    'Kill Datei
    'Name Temp As Datei
End Sub
     Code eingefügt mit Syntaxhighlighter 4.6
Die Stelle, Anzahl der Stellen und den einzutragenden Text sowie den Dateinamen musst du natürlich noch anpassen !

Gruß, NoNet


  

Betrifft: Sollte "AnzStelleN = 3" heißen !! _oT von: NoNet
Geschrieben am: 12.10.2007 13:31:52

_oT = ohne Text


  

Betrifft: AW: Sollte "AnzStelleN = 3" heißen !! _oT von: Stefan
Geschrieben am: 12.10.2007 14:16:57

A B S O L U T beeindruckend. Vielen Dank. genau, was ich brauchte.

Im Bauhaus hätt ich dir jetzt ein Mitarbeiter-Lob-Kärtchen ausgefüllt ;)

Nur eines noch bitte:

Da die 10er Zeilen exakt 130 Zeichen lang sein sollen, sollen die Leerzeichen 128, 129, 130 durch den Text "XYZ" ersetzt werden. Mit deiner Lösung steht zwar der Text "XYZ" an den Stellen 128, 129, 130, aber dahinter folgen noch 2 Leerzeichen. Wie bekomme ich die denn noch weg?

Ich vermute, es liegt an folgender Programmcode-Zeile:
Zeile = Left(Zeile, Stelle - 1) & Text & Mid(Zeile, Stelle - 1 + AnzStellen, Len(Zeile))

Ich verstehe den Bereich ab "...Mid(Zeile, Stelle -1..." nicht so recht.

Gruß

Stefan


  

Betrifft: Dann lasse alles ab "& Mid(..." weg von: NoNet
Geschrieben am: 12.10.2007 14:32:26

Hallo Stefan,

Danke für das "Lobkärtchen", ich werde es mir ausdrucken und an die Wand hängen oder bei meinem nächsten BAUHAUS-Einkauf einlösen .

Der Teil & Mid(...) sorgt dafür, dass der Text ab Stelle 131 auch wieder angehängt wird, also z.B. :

Aus ABCDEFGHIJKLMNOPQRSTUVWXYZ werden ab Stelle 20 drei Zeichen durch "###" ausgetauscht :
Das ergibt ABCDEFGHIJKLMNOPQRS###WXYZ - das "WXYZ" muss also noch hinter diese drei Zeichen !
Wenn es jedoch die letzten drei Zeichen der jeweiligen Zeilen sind, dann kannst Du den Teil & Mid(...) aus o.g. Code auch weglassen, dann sollte es klappen !

Gruß, NoNet


  

Betrifft: AW: Dann lasse alles ab "& Mid(..." weg von: Stefan
Geschrieben am: 12.10.2007 14:57:46

PERFEKT


Danke nochmals.

Gruß

Stefan