Strings in einer Textdatei durch größere ersetzen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Firstdeathmaker

Betreff: Strings in einer Textdatei durch größere ersetzen

BeitragMi, Nov 03, 2004 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, ich habe folgendes Problem:

Ich programmiere gerade eine Datenbank. Beim arbeiten mit der Datenbank merke ich gerade, dass man, wenn man mit writeline arbeitet, so viele Zeichen nach der startposition löscht wie der neue Eintrag Zeichen hat. Nun ja, ich habe nur leider keinen Befehl gefunden mit dem ich den Datenstrang weiterschieben kann, also werden die nachfolgenden Datenzeilen angeknabbert:

[Vor dem einfügen]
101.1.1=0,0|DATE:3.11.2004
101.1.2=0,0|DATE:3.11.2004
101.1.3=0,0|DATE:3.11.2004
101.1.4=0,0|DATE:3.11.2004
101.1.5=0,0|DATE:3.11.2004

[Nach dem einfügen]
101.1.1=0,0|DATE:3.11.2004
101.1.2=Tada,543|DATE:3.11.2004
.3=0,0|DATE:3.11.2004
101.1.4=0,0|DATE:3.11.2004
101.1.5=0,0|DATE:3.11.2004


Es gäbe ja die Brutale Möglichkeit einfach eine komplett neue Datei zu erstellen und sie am Ende umzubenennen, aber das wäre schlecht (weil langsam).

MFG
FDM
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

simi

BeitragMi, Nov 03, 2004 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke es gibt keine andere Möglichkeit, als alles neu abzuspeichern. Das macht ja auch Word und andere Programme immer so.....
 

getlose

BeitragMi, Nov 03, 2004 19:50
Antworten mit Zitat
Benutzer-Profile anzeigen
dateien schreiben/erstellen/umbenennen benötigt
relativ wenig zeit wenn du die files nicht gerade
realtime abfragst.

kannst den kran natürlich auch in types
speichern und nachtragen---
 

Timo

BeitragMi, Nov 03, 2004 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
och ich glaub so langsam ist es nicht, wenn du es nicht verschlüsseln willst. Ich weis zwar nicht wie groß es werden soll, aber speicher ein file lieber immer ganz neu.

du kannst natürlich für zeichenketten platz resevieren, sagen wir 100 Zeichen. Dann brauchst du eben nicht alles abspeichern, bist aber nicht mehr so flexibel. du kannst nicht mehr über 100 Zeichen abspeichern, und verbrauchst viel speicher (100Byte pro Zeichenkette Smile - aber das hochgerechnet) wenn du zum Beispiel nur 5 Buchstaben abspeichern willst Wink

Firstdeathmaker

BeitragMi, Nov 03, 2004 20:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, also die Datenbank hat insgesammt 100*100*16 Einträge (Zeilen).
Das macht eine Roh-Filegröße von 4,38 MB. Das dauert also schon seine Zeit. Mein Problem besteht ja im Moment darin, die Datenbank per Scriptdatei zu updaten, d.h. ich habe folgendes Script:

Code: [AUSKLAPPEN]
DATE:2.11.2004
101.5.3=PlayerT[Sinus],8506554   ;Koordinate=Playername[Allyname],Punkte
105.6.2=Wiesel[Sinus],35465
DATE:3.11.2004
151.7.1=Wiesel[Sinus],35465


Und muss jetzt meine Datenbank mit den Daten abgleichen und wenn die Daten neuer oder vom gleichen Tag sind wird der Eintrag ersetzt.
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Nov 03, 2004 20:40
Antworten mit Zitat
Benutzer-Profile anzeigen
das war doch schonmal... habe da doch was gecodet
https://www.blitzforum.de/viewtopic.php?t=5296
letzte Seite .....

aber besser immer einlesen und neu schreiben
[BB2D | BB3D | BB+]

BladeRunner

Moderator

BeitragMi, Nov 03, 2004 20:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Lade die Datei zu Beginn ein und speichere sie nur wieder wenn das Programm beendet wird oder explizit eine Save-Funktion aufgerufen wird.
Alle "Dateizugriffe" zur Laufzeit sollten nur im RAM stattfinden. Ist schneller, verhindert ein fragmentieren und (vorausgesetzt deine Software läuft stabil) sicher genug ist es auch.
Du kannst ja auch ein Flag setzen ob die Datei überhaupt verändert wurde und wenn ja welches die erste geänderte Position ist und dann ab dort neu auf Disk schreiben.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Firstdeathmaker

BeitragMi, Nov 03, 2004 22:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, Blade, so klappt es. Ich wollte zuerst kein so riesiges DIM-Feld nehmen, aber es ist die schnellste Methode.

Auf Danke an alle die mir sonst noch weitergeholfen haben!

MFG
FDM
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

regaa

BeitragMi, Nov 03, 2004 23:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würd ne Datenbank ganz anders aufbauen. Z.B. so:

Tabellenname Spaltenname GrößeDerSpalteInZeichen TypDerSpalte Spaltendaten...... Spaltenname2 etc.....

Dadurch brauchst du nur einmal die spalten definieren und musst nachher nur die Datenfelder aktualisieren.

Falls du eine funktionierende Version einer Datenbank haben willst kannst du mich ja per PN anfragen. Unterstützt Befehle wie:

rdb_init
rdb_use_db
rdb_create_db
rdb_create_table
rdb_insertinto_table
rdb_selectfrom_table
rdb_updatefrom_table
rdb_exists_db

ist zwar noch nichts sehr viel aber bisher hat es mir für alles ausgereicht, ich denke ich werde sobald das auch noch löschbefehle enthält und alles schön schnell funzt (an optimierung hat ich bisher fast noch gar nicht gedacht), ich das Ding nach Projekte verschiebe. Von der Funktionsweise zumindest von den Ergebnissen her, hab ich mich an MySQL gehalten, (was ich keinster Weise den Funktionsumfang und Leistung des MySQL-Servers nachkommt).
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group