Variable aus TextDatei interpretieren ?

Anfängerfragen zum Programmieren mit PureBasic.
Glow
Beiträge: 45
Registriert: 31.01.2005 01:36

Variable aus TextDatei interpretieren ?

Beitrag von Glow »

Hi

Ich steh grad auf dem Schlauch: Wie schaffe ich es, in einer Textdatei eine Variable zu speichern, und die im Program in einer Schleife zu interpretieren ?
Also, Z.B in der Textdatei steht:

MeinProgrammVerzeichniss + "\Data\Highscore.txt"

Im Program wird nun diese Zeile ausgelesen, und soll direkt als Pfad benutzt werden. Allerdings wird das nur als String behandelt, also 1:1 ausgegeben.
Hab ich da irgendwas übersehen ?

Gruß
Glow
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

Beitrag von ts-soft »

Deine Frage ist sehr ungenau
Willste eine numerische Variable einlesen, so:
a.l = val(readstring(....

oder einen String.

Vielleicht solltest Du Dir mal die Preferences Lib ansehen, damit ist es einfach Variablen zu speichern :wink:

Gruß
Thomas
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
Glow
Beiträge: 45
Registriert: 31.01.2005 01:36

Beitrag von Glow »

Das Ziel war/ist eigentlich einen String einzulesen, der sofort als absoluter Pfad akzeptiert wird.

also, z.B mit Readfile(0,ReadString())

ReadString() beinhaltet im Beispiel also: MeinProgrammVerzeichniss + "\Data\Highscore.txt" als String

Vorher im Program wurde die Variable MeinProgrammVerzeichniss z.B deklariert mit "C:\MeinProgramm"

ReadFile sollte also beim Aufruf Readfile(0,ReadString()) direkt zugreifen auf:
C:\MeinProgramm\Data\Highscore.txt

Das macht es aber nicht, da die Variable MeinProgrammVerzeichniss nicht interpretiert wird.

Ich habe das Problem jetzt etwas unelegant über ReplaceString gelöst. Das funktioniert zwar, ist aber halt nicht perfekt :/
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

Beitrag von ts-soft »

Verstehe es immer noch nicht. Meinste sowas:

Code: Alles auswählen

MeinProgrammVerzeichnis.s = "C:\MeinProgramm\"
If ReadFile(0, MeinProgrammVerzeichnis + "Data\Highscore.txt")
  highcore.l = Val(ReadString(0))
  CloseFile(0)
EndIf
?
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
Glow
Beiträge: 45
Registriert: 31.01.2005 01:36

Beitrag von Glow »

Nein, das ganze sollte so aussehen:

Code: Alles auswählen

MeinPfad.s = "C:\Windows\MeinProgram"

ReadFile(0,"Config.txt")

MeineConfig.s = ReadString()

CloseFile(0)

ReadFile(0,MeineConfig)

...

In der Config.txt steht folgendes:

Code: Alles auswählen

MeinPfad\Data\MehrConfig.txt
Das Program liest also folgenden String ein: "MeinPfad\Data\MehrConfig.txt"

Nun soll es automatisch "MeinPfad" als "C:\Windows\MeinProgram" interpretieren, da dies ja vorher so deklariert wurde.
Das ist eigentlich schon alles ;)
Icke
Beiträge: 143
Registriert: 08.09.2004 13:19

Beitrag von Icke »

Wenn ich richtig verstanden habe willst du eigenlich nur den eingelesenen String "MeinPfad\Data\MehrConfig.txt" gegen "C:\Windows\MeinProgram\Data\MehrConfig.txt" austauschen?

Code: Alles auswählen

MeinPfad.s = "C:\Windows\MeinProgram"

ReadFile(0,"Config.txt")

MeineConfig.s = ReadString() ; ="MeinPfad\Data\MehrConfig.txt"

CloseFile(0)

MeinPfad_neu.s=ReplaceString(MeineConfig.s,"MeinPfad",MeinPfad.s) ;="C:\Windows\MeinProgram\Data\MehrConfig.txt
"

ReadFile(0,MeinPfad_neu)
...
PB4 - frisch gezogen!
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
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

Beitrag von NicTheQuick »

@Glow:
Anders als mit ReplaceString() geht es nicht aus folgendem Grund:
Wenn dein Programm compiliert ist, dann gibt es keine Variablennamen
mehr, sondern nur noch Offsets und Pointer und ähnliches. Das heißt, wenn
dein Programm läuft, würde es gar nicht wissen, dass du eine Variable
namens "MeinPfad.s" hast.

Außerdem: Wenn da nie etwas anderes als MeinProgrammVerzeichnis in der
Datei steht, warum schreibst du dann nicht einfach nur "Data\MehrConfig.txt"
in die Datei und setzt deine "MeinProgrammVerzeichnis.s"-Variable vorne
dran? Dann musst du auch nichts umständlich ersetzen.
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Code: Alles auswählen

MeinPfad.s = "C:\Windows\MeinProgram\"

ReadFile(0,"Config.txt")

MeineConfig.s = ReadString() ; ="Data\MehrConfig.txt"
CloseFile(0)

MeinPfad_neu.s=MeinPfad + MeineConfig;="C:\Windows\MeinProgram\Data\MehrConfig.txt
"

ReadFile(0,MeinPfad_neu)
Wäre das nicht viel sinniger als mit dem Replace? Okay, wenn er später so spezielle Sachen machen möchte wie "%OSPATH%/Win32" dann wäre es sinnvoll- aber bisher klingt es eher nach einfachem String zusammenwurschteln...

Gr33tz
Tafkadasom2k5

Edit: Upsa, ich habe NTQ leicht wiederholt ;) Sieh es als Unterstreichung an :mrgreen: :allright:
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Glow
Beiträge: 45
Registriert: 31.01.2005 01:36

Beitrag von Glow »

@Nic: Ok, das leuchtet mir jetzt ein, danke für die Erklärung. Es ist schon so, daß das Program am Ende viele Variablen interpretieren muss. Deswegen brauchte ich das ganze :)
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

Aber ich denke ,wenn die Variablen sowieos im Programm da sind, kannst du doch Preferences benutzen (schau mal in die Hilfe) so kannst du dann das ganze mit Keywords machen.. is finde ich die einfachste lösung annähernd an dein Problem zu kommen
Antworten