Textdatei ändern bzw Wert ersetzen.

Anfängerfragen zum Programmieren mit PureBasic.
funkheld
Beiträge: 649
Registriert: 31.12.2009 11:58

Textdatei ändern bzw Wert ersetzen.

Beitrag von funkheld »

Hallo, guten Tag.

Ich möchte bitte bestimmt Werte ersetzen aus einer Textdatei.
1000
0
#
5
-1
0
0
0
#
9
-1
0
1000
0
#
0
-1
0
0
0
#
0
#
#
0
56
Alle Werte mit "1000" sollen ersetzt werden durch die "0".

Wie geht das ?

Danke.

Gruss
peter
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

Re: Textdatei ändern bzw Wert ersetzen.

Beitrag von Sunny »

Hier mal ein kleines Beispiel, wie man das Problem lösen könnte:

Code: Alles auswählen

NewList row.s()

Datei$ = "Pfad zur Text-Datei"

If OpenFile(0, Datei$)
  While Eof(0) = 0
    AddElement(row())
    row() = ReadString(0)
    
    If row() = "1000"
      row() = "0"
    EndIf
    
  Wend
  
  CloseFile(0)
  
  If CreateFile(0, Datei$)
    ForEach row()
      WriteStringN(0, row())
    Next
    
    CloseFile(0)
  EndIf
  
EndIf
funkheld
Beiträge: 649
Registriert: 31.12.2009 11:58

Re: Textdatei ändern bzw Wert ersetzen.

Beitrag von funkheld »

Jup, danke.

Wusste garnicht, das es mit so wenig Befehlen funktioniert.


Gruss
peter
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Textdatei ändern bzw Wert ersetzen.

Beitrag von NicTheQuick »

Eine andere (allerdings fehleranfällige) Möglichkeit wäre diese hier:

Code: Alles auswählen

Define.s file = "Dateiname.txt"
Define *mem, content.s, format.i

If ReadFile(0, file)
	format = ReadStringFormat(0)
	*mem = AllocateMemory(Lof(0), #PB_Memory_NoClear)
	If *mem
		ReadData(0, *mem, Lof(0))
		content = PeekS(*mem, -1, format)
		FreeMemory(*mem)
		content = ReplaceString(content, "1000", "0")
	EndIf
	CloseFile(0)
	If CreateFile(0, file)
		WriteString(0, content, format)
		CloseFile(0)
	EndIf
EndIf
Fehleranfällig ist sie deswegen, weil jedes Vorkommen von "1000" zu einer "0" ersetzt wird, d.h. auch wenn da steht "1000456" wird dies zu "0456".

Ich wollte nur noch eine zweite Möglichkeit darstellen. Der Code von Sunny gefällt mir eigentlich besser.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Textdatei ändern bzw Wert ersetzen.

Beitrag von ts-soft »

NicTheQuick hat geschrieben:Fehleranfällig ist sie deswegen, weil jedes Vorkommen von "1000" zu einer "0" ersetzt wird, d.h. auch wenn da steht "1000456" wird dies zu "0456".
Nach jeder Zeile befindet sich ein CRLF$ bzw. LF$, wenn Du das mit einbeziehst ist die Fehleranfälligkeit beseitigt.
Dein Code ist in jedem Falle wesentlich schneller, was sich allerdings bei so kleinen Dateien nicht auswirken wird.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Re: Textdatei ändern bzw Wert ersetzen.

Beitrag von 7x7 »

funkheld hat geschrieben:Alle Werte mit "1000" sollen ersetzt werden durch die "0".
Wenn "0000" oder 3xLeerzeichen +"0" auch genehm ist, reicht auch:

Code: Alles auswählen

OpenFile(1,"Dateiname.txt")
While Not Eof(1)
	If ReadString(1)="1000"
		FileSeek(1,Loc(1)-6)
		WriteStringN(1,"0000")   ;bzw. 3xLeerzeichen+"0"
	EndIf
Wend
CloseFile(1)
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Antworten