Seite 1 von 2

Speichern von Daten

Verfasst: 10.05.2007 20:57
von dietmar
Guten Abend

ich such die einfachste Möglcihkeit viele gleiche Daten zu speichern, in Fenster darzustellen, Daten hinzuzufügen und auch wieder zu löschen. Der hintergrund ich soll was proggen für eine Kindergarten. Dazu soll für jedes kind die dazu gehörenden Daten(Adresse, Alter, Gruppe usw.) verarbeitet werden können.

Die verarbeitung bekomm ich hin aber wenn es darum geht das in eine Tabelle oder Datenbank zu speichern beginnn die Probleme. An diesem punkt find ich die Hilfe nicht wirklich aufschlussreich, die Foren-Suche hilft mir auch nicht und die MDB_lib funktioniert nicht weil eine andere Lib fehlt.

Die Frage ist wie kann ich jetzt im Prinzip eine LinkList am einfachsten speichern?

Verfasst: 10.05.2007 21:00
von Scarabol
Hallo,

ich nem mal einfach an die Linked List hat eine Struktur dann könntest du sie wie folgt speichern:

Code: Alles auswählen

createfile(1, "kids.txt")
foreach test()
writestring(1, test()\name+"%"+test()\alter+"%"+test()\lieblingsfarbe ;use
next
closefile(1)
Ist nicht optimiert reicht aber für ein erstes Verständnis denke ich

Gruß
Scarabol

Verfasst: 10.05.2007 21:32
von uweb
Ich finde die Datenbank-Möglichkeiten bei PureBasic rießig. Es ist zwar keine eingebaut aber die Wege zu bestehenden Lösungen sind schon breitgetrampelt (SQLite, Cheetah, MySQL, ODBC, Access, ... die beiden erstgenannten scheinen mir am einfachsten) und hier oder im englischen Forum reichlich beschrieben. Benutze einfach die Namen in der Klammer als Suchbegriff.

Alternativ :
Die aller einfachste Methode wäre wohl das Thema Datenbanken bei der Aufgabe auszuklammern und
alles beim Start und Ende des Programms einzeln mittels File-Befehle (ReadString, WriteString , ...)
zu speichern. Das hätte aber den Nachteil, daß bei einem Absturz während dem Arbeiten die neuen Daten weg sind.
Bei einer festen Satzlänge könntest Du mit wenig mehr Aufwand per FileSeek in der Datei navigieren und satz- oder feldweise speichern. Bei der Größe eines Kindergarten wäre es wahrscheinlich aber auch noch vertretbar immer (also auch während dem Arbeiten) die ganze Datei auf einmal zu schreiben. Wenn Du die bestehende Datei vorher mit RenameFile umbenennst hast Du immer eine Kopie der alten.

Verfasst: 10.05.2007 21:36
von dietmar
Find ich im Prinzip gar nicht schlecht, nur das wenn ein Kind dann den Kindergarten verlässt sollte es eigentlich aus der Datei gelöscht werden, dann müsste man jedesmal die Datei neu erzeugen, und die Leerzeilen löschen. Auch wenn die Daten sich ändern seh ich dan das Problem das für jede Änderung im Prinzip die Datei neu erzeugt werden müsste, seh ich das richtig?

Noch ne Frage interessehalber. Wenn "%" durch ";" erstezt wird und die Datei mit der Endung *.csv erstellt wird, ist das dann schon ne CSV-Datei, also eine Datei die in Exel importiert werden können?

Verfasst: 10.05.2007 21:40
von ts-soft
>> MDB_lib funktioniert nicht weil eine andere Lib fehlt.
Da fehlt keine Lib, sondern Du hast die falsche Version, unter ASM4.0
http://www.reelmediaproductions.com/pb
findeste die passende für PB4, bzw. direktlink:
http://www.reelmedia.org/pureproject/ar ... DB_Lib.zip

Verfasst: 10.05.2007 21:46
von D@nte
Ne Datei mit der Endung .csv kann immer mit EXCEL geöffnet werden (genauso wie ich ne .exe in .txt umbenennen kann und mit Notepad öffnen kann) und ja wenn die Datei .csv heißt und zwischen den Daten eines Datensatzes der Operator ; verwendet wird se mit ESCEL korrekt dargestellt..

Nur wo wäre das Problem die Datei jedesmal neu zu erstellen?! Die Ladezeit kann's nicht sein da ich bezweifle das es in dem Kindergarten mehr als 55k Kinder gibt, für meine mobile Rechnungsdruckerei lad ich über 55k Datensätze in < 20 sek

Verfasst: 10.05.2007 21:55
von uweb
Ich bin heute etwas langsam. Da ich den Text nun aber schon einmal habe sende ich ihn auch :

http://de.wikipedia.org/wiki/CSV-Datei sagt CSV steht für Character Separated Values, Comma Separated Values oder Colon Separated Values. Die genaue Bedeutung ist also nicht fix. Deshalb bietet Excel ja auch so viele Optionen beim Laden und speichern an. Auf jeden Fall ist es eine Textdatei bei der Sätze durch Zeilenumbruch und Felder durch ein Zeichen getrennt sind. Manchmal werden Strings noch in andere Zeichen (i.d.R. Hochkomma) eingepackt.

Die Datei ständig neu zu erzeugen war ja im wesentliche mein Alternativ-Vorschlag (der letzte Satz - sollte zumindest einmal pro Sitzung erfolgen). Ich sehe da kein Problem außer der Geschwindigkeit. Die kannst Du aber wahrscheinlich wegen der geringen Datenmenge vernachlässigen. Das Arbeiten an sich geht dafür aus dem Arbeitsspeicher schneller.

Verfasst: 10.05.2007 22:07
von dietmar
:D schon mal über ne Datenbank nachgedacht.

Ne Spaß beiseite, es sind im Moment so ca 109 Datensätze. Es ist ja auch nicht so das es täglich Änderungen gibt, aber es erscheint mir jetzt mal so auf den ersten Blick als recht seltsam jedesmal die Datei zu überschreiben. Aber man könnte doch auch die Änderungen erst mal nur in die Liste übernehmen und beim beenden speichern zusätlich vielleicht noch ein speichern Button und eine Sicherungsdatei alle 2 Stunden?


@ts-soft stimmt. soory bin heute nicht ganz auf der Rolle. Sah da so ein 4.0 rumstehen und klick wars wohl die Falsche.

Verfasst: 10.05.2007 22:10
von Scarabol
Hallo

ich glaub nicht das hier einer meinte, dass die Datei alle 5 sek überschrieben werden soll. Denke mal du solltest es so machen wie in deinem letzten Post beschrieben das hört sich schon vernünftiger an. Wenn es dir allerdings zu unsicher ist kann man ja das Delay für das Backup runterschrauben.

Gruß
Scarabol

@dietmar

Verfasst: 10.05.2007 22:11
von Xaby
http://www.purebasic.fr/german/viewtopic.php?t=12879

Auch hier bei den Anfänger, auf der Hauptseite.

Es ist ganz einfach. Du lädst eh alle Datensätze zum Anzeigen.
Wenn man nun einen Datensatz entfernt, speicherst du wieder alle.

Das machst du so oder so.

Oder du legst für jedes Kind eine Datei an. Das geht auch.
Und realisierst die Sache dann über

ExamineDirectory()

Angenommen dein Datensatz heißt: "Egal.csv"
Dann hast du folgende Struktur:
Name;Vorname;Geburtstag;
Dings;Paul;01.01.2000;
Wenn du nun das Verzeichnis nach allen Dateien mit Endnung CSV
durchsuchst, kannst du eine Liste machen.
Oder ein Array.

Das Array sortierst du nur zum Anzeigen.

Du solltest allerdings zu jedem Datensatz auch den Dateinamen im Array verwalten, damit du weißt, in welche Datei du was eintragen musst.

Vorteil:

Du kannst sogar gleichzeitig von mehreren Rechnern auf deine Kinderverwaltung zugreifen.

Du kannst auch die Kinder einfach als Datei im Ordner löschen.

Und wenn du alles in einem Ordner hast, geht es auch mit der Übersichtlichkeit.

Gruß, Folker :allright: