In Datei Schreiben und Eine Formatierte ausgabe

Für allgemeine Fragen zur Programmierung mit PureBasic.
netfreak
Beiträge: 91
Registriert: 23.10.2004 18:30
Kontaktdaten:

In Datei Schreiben und Eine Formatierte ausgabe

Beitrag von netfreak »

Hallo, also ich habe ein Programm geschrieben das in eine Datei schreibt allerdings überschreibt es jedes mal das was forher drin stand.

Und des wegen meine 1 Frage wie kann ich ihn dazu bringen das er den Text in die nächste Zeile schreibt?

Nun jetzt wüste ich noch gern wie ich die Zeile Formatiert in die datie schreibe? B.: Der Benutzer gibt folgendes ein:
"Spalte eins Spalte zwei spalte drei spalte vier"
v1 v2 v3 v4

v=variable

So jetzt möchte ich aber das er das nicht so in die Datei schreibt sondern so:
"Spalte eins Spalte zwei spalte drei spalte vier"
und wenn dann der nächste ein trag kommt soll das egal sein wie lang v ist. allso so:

"Spalte eins Spalte zwei spalte drei spalte vier"
"dies ist jetzt längei Spalte zwei spalte drei spalte vier"

also ich hoffe irversteht was ich meine!!!

Ich hoffe ihr könnt mir Helfen!
Ich bin für jede Antwort dankbar!!!

netfreak
mfg
netfreak
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
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 »

Um an das Ende einer Datei zu schreiben, öffnest du sie einfach mit [c]OpenFile()[/c] und springst dann mit [c]FileSeek()[/c] und [c]Lof()[/c] an das Ende der Datei. Das sieht dann so aus: [c]FileSeek(Lof())[/c]. Jetzt sollten alle folgenden Schreibanweisungen an die vorhandene Datei angehängt werden.

Was du allerdings mit deiner zweiten Frage weiß ich allerdings nicht, was du damit meinst.
netfreak
Beiträge: 91
Registriert: 23.10.2004 18:30
Kontaktdaten:

Beitrag von netfreak »

Also erst mal Danke für die Antwort!
Alerdings klapt das mit FileSeek(Lof()) nicht ganz er schreibt es einfach hinter den fohrigen eintrag ich möchte aber das er in die nächste zeile schreibt!

Zu 2 Frage:
alos ich habe 4variablen diese sollen wie in einer tabelle geordnet werden so das es so aus sieht "v1 v2 v3 v4" oder so änlich
und wenn dann noch ein eintrag kommt soll es auch so ausseh also heißt das es soll egal seihn wie lang v1 oder v2 ist es soll dan auch so aus sehen:

"v1 v2 v3 v4"
"v1test v2 v3 v4"

Ich hoffe es hat dieses mal jemand verstanden!
mfg
netfreak
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
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 »

Zu dem ersten Problem nochmal:
Wenn du vorher nicht eine Zeile mit einem Return geschrieben hast, ist es logisch, dass die neue Zeile direkt hinter der letzten steht und nicht unten drunter.
Also entweder du schreibst vor der neuen Zeile noch einen Leerstring mit Zeilenende, also mit [c]WriteString("")[/c], oder du machst es schon bei dem Hineinschreiben vorher, indem du auch bei der letzten Zeile [c]WriteString("")[/c] benutzt.

Meinst du damit, dass die einzelnen Spalten bündig übereinander stehen sollen?
netfreak
Beiträge: 91
Registriert: 23.10.2004 18:30
Kontaktdaten:

Beitrag von netfreak »

Danke aber ich habe festgestel das man auch einfach WriteStringN("") verwenden kann drotzdem Danke!!!!
mfg
netfreak
netfreak
Beiträge: 91
Registriert: 23.10.2004 18:30
Kontaktdaten:

Beitrag von netfreak »

Also anscheinend weiß niemand was ich meine!
Also versuche ich es noch mal zu erklären!
Ich lese vom Benutzer Daten ein. Diese werden dann in eine Datei geschreiben. So jetzt möchte ich das z.b.: die Adresse an eine bestimmte Positsion in der Zeile schrieben wird!
Ich hoffe diese mal hat es jemand verstanden!
Und kann mir Helfen!
mfg
netfreak
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Dann wirst du wohl bis zur Position Leerstellen schreiben müssen. Wie sonst soll man an die Stelle kommen? Ist wie mit einer Textdatei, da kann man nicht einfach mittenrein klicken und dort anfangen zu schreiben.
netfreak
Beiträge: 91
Registriert: 23.10.2004 18:30
Kontaktdaten:

Beitrag von netfreak »

Und wie Bring ich hin da zu das er bis zu dieser Position Leerzeichen macht weil das soll ja nachher egal sein wie lang der Name oder die Adresse ist. Die Adress sol nämlich dann immer an der gleich stelle anfangen wie die oben drüber!
Es soll so ausehen:

Code: Alles auswählen

Name1                 Adresse1

Name231231        Adresse23131
und nicht so:

Code: Alles auswählen

name1                        Adresse1

jnasfdadaf                   Adresse22342
Verstanden?
Ich hoffe mir kann jemand helfen!

//Edit: Der liest keine Leerzeichen!!!! Ich hoffe ihr könnt es euch drotzdem vorstellen
///Edit by freedimension: Mit Lin.. äh Code-Tags wäre das nicht passiert ;-) Hab's mal nachträglich eingebaut.
mfg
netfreak
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Dann reservier doch 50 Zeichen für den Namen und weitere 50 für die Anschrift.
Dann schreibst du zuerst den Namen, füllst bis 50 Zeichen mit " " (Leerstellen) auf und schreibst dort dann die Adresse rein. Dann kann man diese Stelle auch direkt per Fileseek() anspringen um einzelne Einträge zu ändern oder so. Aber dann wird das alles recht groß, Speicherplatztechnisch. Wieso soll das denn alles immer so gleich angeordnet sein? Wenn die Datei asl eine Art Datenbank dienen soll, ist die optik dadrinnen doch wurscht.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
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 »

Achso. Das ist doch einfach:

Code: Alles auswählen

#Space = 50 ; maximaler Platz, wenn Name = "" und Address = ""
Procedure WriteNameAndAddress(Name.s, Address.s)
  WriteStringN(Name + Space(#Space - (Len(Name) + Len(Address))) + Address)
EndProcedure

File.s = "C:\Addresses.txt"

If OpenFile(0, File)
  FileSeek(Lof())
  WriteStringN("")
  WriteNameAndAddress("Name", "Straße")
  WriteStringN(LSet("", #Space, "-"))
  WriteNameAndAddress("Theobald Hock", "Müncherstr. 8")
  WriteNameAndAddress("Jürgen Henning", "Wiesbadnerstr. 24")
  WriteNameAndAddress("Maria Wellenstein", "Am Römerhof 13")
  CloseFile(0)
EndIf
Antworten