# ab bestimmter Zeile aus Textfile auslesen und verändern



## Enehy (23. Juli 2012)

Guten Morgen,


*Frage 1:*
ich möchte in einer Textdatei nach mehreren Werten suchen. Wenn gefunden  die folgende zweite und dritte Zeilen auslesen. Diese aufspalten, minus nehmen und diese Zahl durch das Ergebnis ersetzen. 

*Beispiel:*

[SEG 1]
0
0 0
0 0


Gesuchter Wert = „[SEG 1]“
Zweite =“0 0“
Dritte =“0 0“
Vorgegebener Wert= „2520000“




*Ergebnis:*

[SEG 1]
0
-2520000 0
-2520000 0


*Frage 1: Erledigt*




*Frage 2:*
Zusätzlich möchte ich nach dem Wert1 suchen. Wenn gefunden nach dem zweiten Wert Ausschau halten. Wenn gefunden die Zeilenzahl in abspeichern. 

Wert1 = Zeile 4000
Ab Zeile  4000 nach Wert2 = „<“ suchen und alle Zeilennummer wo dieser Wert vorkommt zwischenspeichern. 
Wert2.1 = 4010
Wert2.2 = 4310
Wert2.3 = 4510

folglich die vierte Zeile auslesen.

Zeile 4014 lesen und aufsplitten
Zeile 4314 lesen und aufsplitten
Zeile 4514 lesen und aufsplitten

…


*Beispiel:*

[INSP-SCREEN]
..
1 <
..
..
..
1943775 1824675 2135775 1824675 2135775 1671075 1943775 1671075

Gesuchter Wert 1 = „[INSP-SCREEN]“
Gesuchter Wert 2 = „<“
Vierte=  1943775 1824675 2135775 1824675 2135775 1671075 1943775 1671075
Vorgegebener Wert= „2520000“



*
Ergebnis:*

[INSP-SCREEN]
..
1 <
..
..
..
-576225 1824675 -384225 1824675 -384225 1671075 -576225 1671075



Gruß
Alex


----------



## Yaslaw (23. Juli 2012)

Sieht nach einem Cheat-Script aus.

Dein 2tes Beispiel versteh ich nicht.

Ich verwende die Referenzen auf :
Microsoft Scripting Runtime




```
Public Sub test()
    Dim fso             As New FileSystemObject
    Dim streamIn        As TextStream
    Dim streamOut       As TextStream
    Dim lines()         As String
    Dim nextLineIndex   As Long
    Dim flagSeg1        As Boolean
    Dim replaceSeg1     As Variant
    Dim line            As Variant
    Dim repalceIndex    As Integer
    Dim filePath        As String
    Dim backUpPath      As String
On Error GoTo Err_Handler
    
    filePath = "C:\tmp\test.txt"
    backUpPath = fso.BuildPath(fso.GetParentFolderName(filePath), "Backup_" & fso.GetFileName(filePath))
    Call fso.CopyFile(filePath, backUpPath)
    Set streamIn = fso.OpenTextFile(filePath, ForReading)
    
    replaceSeg1 = Array(Null, "2520000", "2520000")
    repalceIndex = 0
    flagSeg1 = False
    nextLineIndex = 0
    Do While Not streamIn.AtEndOfStream
        line = streamIn.ReadLine
        
        If flagSeg1 And repalceIndex <= UBound(replaceSeg1) Then
            line = Nz(replaceSeg1(repalceIndex), line)
            repalceIndex = repalceIndex + 1
        End If
        
        If repalceIndex > UBound(replaceSeg1) Then
            repalceIndex = 0
            flagSeg1 = False
        End If
        
        If Trim(line) = "[SEG 1]" Then flagSeg1 = True
            
        ReDim Preserve lines(nextLineIndex)
        lines(nextLineIndex) = line
        nextLineIndex = nextLineIndex + 1
            
            
        Debug.Print line
        'Call stream.WriteLine(line)
    Loop
    
    streamIn.Close
    Set streamIn = Nothing

    Set streamOut = fso.OpenTextFile("C:\tmp\test.txt", ForWriting)
    For Each line In lines
        streamOut.WriteLine (line)
    Next line

    streamOut.Close
    Set streamOut = Nothing

Exit_Handler:
    If fso.FileExists(backUpPath) Then Call fso.DeleteFile(backUpPath, True)
    Set fso = Nothing
    Exit Sub
Err_Handler:
    '//TODO: Fehleranzeige
    'Alles rückgängig machen
    If fso.FileExists(backUpPath) Then Call fso.CopyFile(filePath, backUpPath, True)
    Resume Exit_Handler
    Resume
End Sub
```


----------



## Enehy (24. Juli 2012)

Beim zweiten Beispiel wird jeder zweite Wert aus der Zeile minus dem vorgegebenen Wert genommen

*Original*
*1943775* 1824675 *2135775* 1824675 *2135775* 1671075 *1943775 *1671075

*Vorgegebener Wert *
„*2520000*“

*Ergebnis*
*-576225* 1824675 *-384225 *1824675 *-384225* 1671075* -576225* 1671075

P.S. Thx für die schnelle Antwort


----------

