Seite 1 von 1

3. Zeile in einer Textdatei ändern.

Verfasst: 26.11.2019 12:46
von funkheld
Hallo, guten Tag.

Wie kann man eine 3.Textzeile in einer Datei ändern.

so sehen die Zeilen aus:

processor 6502

ORG $01

chartrans
jmp block41
charset dc.b $0ff, $081, $081, $081, $081, $081, $081, $0ff
..........
..........


Danke.
gruss

Re: 3. Zeile in einer Textdatei ändern.

Verfasst: 26.11.2019 13:25
von Josh
Mit Texteditor öffnen, ändern, speichern :mrgreen:

Re: 3. Zeile in einer Textdatei ändern.

Verfasst: 26.11.2019 15:06
von Mijikai
Habs mal so gelöst:

Code: Alles auswählen

EnableExplicit

Procedure.i ChangeLine3(File.s,Text.s)
  Protected handle.i
  Protected result.i
  Protected str.s
  Protected s1.i
  Protected s2.i
  Protected *buffer
  Protected buffersize.i
  If File
    If Not FileSize(File) < #Null
      handle = OpenFile(#PB_Any,File,#PB_Ascii)
      If IsFile(handle)
        ReadString(handle)
        ReadString(handle)
        s1 = Loc(handle)
        ReadString(handle)
        s2 = Loc(handle)
        buffersize = Lof(handle) - s2
        *buffer = AllocateMemory(buffersize)
        If *buffer
          If ReadData(handle,*buffer,buffersize) = buffersize
            FileSeek(handle,s1,#PB_Absolute)
            TruncateFile(handle)
            If WriteStringN(handle,Text)
              If WriteData(handle,*buffer,buffersize) = buffersize
                result = #True
              EndIf
            EndIf
          EndIf
          FreeMemory(*buffer)
        EndIf
        CloseFile(handle)
      EndIf
    EndIf
  EndIf
  ProcedureReturn result
EndProcedure

Debug ChangeLine3("test.txt","Hello World!")

End
Ich denke besser wäre es wenn mit einem Signatur-Scanner die Zeilenumbrüchen zu ermitteln.
Solange es nur für ein internes Tool ist und es sich nur um wenige Zeilen handelt sollte die Lösung ok sein.

Re: 3. Zeile in einer Textdatei ändern.

Verfasst: 27.11.2019 15:48
von funkheld
Danke für die Info.



Gruss

Re: 3. Zeile in einer Textdatei ändern.

Verfasst: 28.11.2019 08:39
von stab
Abgesehen davon, dass mir die Version von Josh am sympathischten ist, hier meine klassische Version mittels File und Filesystem Library.
Hatte letztens sowas ähnliches.

Code: Alles auswählen

#Alt = 1
#Neu = 2
 
textdatei$    = "D:\Temp\test.txt"
textneu$      = "Hier ist meine neue 3. Zeile"
textzeile     = 3

Procedure.s ersetzeTextzeile(datei$,text$,zeile)
ergebnis$ = "Scheint funktioniert zu haben"  
dateiSicherung$ = GetPathPart(datei$) + GetFilePart(datei$ ,#PB_FileSystem_NoExtension) +" (Sicherung)." + GetExtensionPart(datei$)
DeleteFile(dateiSicherung$)
If RenameFile(datei$, dateiSicherung$)
  If ReadFile(#Alt, dateiSicherung$) And OpenFile(#Neu, datei$)
      z=0
      Repeat
        z+1 
        tmpZeile$ = ReadString(#Alt)
       If Not z = zeile : Textzeile$ = tmpZeile$ : Else : Textzeile$ = text$ : EndIf 
          WriteStringN(#Neu, Textzeile$ )
       Until Eof(#Alt)
   Else : ergebnis$ = "Fehler Read/Open File" : EndIf
Else : ergebnis$ = "Fehler RenameFile" : EndIf
ProcedureReturn ergebnis$
EndProcedure

Debug ersetzeTextzeile(textdatei$,textneu$,textzeile)


Re: 3. Zeile in einer Textdatei ändern.

Verfasst: 28.11.2019 09:42
von Mijikai
@stab bin bei meiner Lösung nicht davon ausgegangen das WriteStringN() schon so ausgereift ist,
gut zu wissen :)

Re: 3. Zeile in einer Textdatei ändern.

Verfasst: 04.12.2019 19:37
von funkheld
Danke für die Hilfe.

Gruss