PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einfache Tabelle und C++



Berufspenner
10-08-2003, 22:57
Hi@all

Ich suche eine Möglichkeit ohne einen Datenbankserver Daten in einer Tabelle zu verwalten (eintragen, aberfragen, ändern, löschen).Das ganze sollte recht schlank bleiben weswegen ich da z.B. nicht mit mysql++ ran möchte. Gibt es da was? Sowas wie eine Exceltabelle die ich bearbeiten kann.

Cu
André

guardian
10-08-2003, 23:20
Also weiß jetzt nicht genau wie du das machen willst, aber vielleicht könnten dir ja die einfach/doppelt verketteten Listen weiterhelfen. Machst halt nur ein schönes Layout aufm Screen.

Oder erklär doch mal ein bißchen genauer was du machen willst :)

MfG guardian

Berufspenner
10-08-2003, 23:26
Hi

Ja, mit Array könnte man da schon was machen. Diese Tabelle soll aber eine Datei sein, auf die dann mit einem Programm drauf zugegriffen werden soll.

Cu
André

Nuke
10-08-2003, 23:27
Hmm,

also ich wüsste nur ne Möglichkeit das du alles in ein struct schreibst, und dann das struct in eine Datei kopierst. Dann beim öffnen das struct wieder einlesen.

Frag mich aber nicht wie genau das geht. Ich habs nur von nem Kumpel mal gehört.

guardian
10-08-2003, 23:35
@Nuke: hast noch nicht mit Listen gearbeitet - oder ? Genau das was du umschrieben hast, ist ne erweiterte Weise mit Strukturen zu arbeiten :)

@Berufspenner: Willst du zur Laufzeit des Programms die Daten auslesen ? Weil wenn dem nicht so wäre, dann könnte man das vielleicht mit nen paar DirtyTricks das wirklich noch mit den Listen realisieren. Allerdings wenn du zur LZ auslesen wollen würdest, fällt mir jetzt spontan auch nichts weiter ein *grübel*

MfG guardian

Berufspenner
10-08-2003, 23:38
Hi@all

Also ich möchte eine Tabelle in einer Datei haben, die ich nach wahl wärend der Laufzeit auslesen und editieren kann.

Cu
André

Berufspenner
11-08-2003, 21:43
*schieb*

Gibt es da denn keine Möglichkeit? Ich wollte für das Projekt nicht gleich nen riesen DB-Server aufsetzen. Ein kleines Datenbanksystem würde ja auch ausreichen bzw. eins, was man einbinden kann wie eine Bibliothek.

Cu
André

guardian
12-08-2003, 10:33
Also ich habe noch mal im Internet nachgeschaut, aber leider nichts gefunden, wie man es mit C++ realisieren könnte.

Dann hab ich noch mal meine gesamte Literatur durchgeschaut, und mir ist der Einfall gekommen, dass du es vielleicht so machen könntest: wenn du eine Eingabe machst, wird es doch automatisch erst in einen Puffer geschrieben; das bedeutet, wenn du regelmäßig den Puffer flushen könntest (ich würde dafür vielleicht eine temporäre Datei benutzen), und dann diese Daten ausließt, dann könntest vielleicht sogar zur Laufzeit deines Programms eine Datei haben, die aktuell bleibt. Nach Beendigung des Programms ließt du dann die temp-Datei aus, und schreibst den Inhalt dieser temp-Datei in eine entsprechende andere Datei (und natürlich den restlichen Puffer der sich noch im Speicher befindet).

Wird aber sicherlich kein einfaches Vorhaben. Aber mit ein paar Schleifen und Listen könnte das vielleicht sogar machbar sein. Ich hör mich mal weiter um, und sag dir Bescheid wenn ich eventuell noch was erfahren sollte :)

MfG guardian

anda_skoa
12-08-2003, 21:30
CQL++?
http://www.cql.com/

Ciao,
_

cybercrow
12-08-2003, 21:59
ich weiß noch nicht genau was du machen willst.
Aber wenn du einfach einen Datensatz in einer Datei gespeichert haben willst, den dann mit dem programm laden, editieren und wieder abspeichern willst sollte es kein problem sein.
Überlege dir einfach ein Format und schreibe dann die Daten so in eine normale ASCII Datei und ließ sie aus.
Im Programm kannst du das ganze dann in verketteten Listen oder einer Baumstruktur verwalten. Das sollte eigentlich nicht so schwer sein...

Wenn du natürlich direkt im Datensatz (also in der Datei) arbeiten willst wird es schwieriger.

Berufspenner
12-08-2003, 22:46
Hi@all

Gennerell möchte ich einzellne Datensätze tabellarisch sortieren. Beispielsweise Benutzerdaten, etc. Also nicht einfach einen Datensatz irgendwo in eine Textdatei tackern. Deswegen soll das ganze ja tabellarisch sein um geziehlt z.B. per Indizierung einen oder mehrere Datensätze abfragen und editieren. Nur will ich das ganze nicht mit php und MySQL sondern mit C++ und wenn möglich ohne einen Datenbankserver und selbst da sind mir die Informationsquellen für libsqlplus geschweige denn libpqxx viel zu rahr. Was läuft denn hinter Verwaltungssystemen ab? Die haben doch auch nicht auf jedem Client einen DB-Server, oder? Mir wäre es halt am liebsten wenn es ohne einen DB-Server gehen würde.

@anda_skoa
Das werde ich mir morgen mal in ruhe angucken.

Cu
André

cybercrow
13-08-2003, 00:02
Also wenn du direkt in der "Datei" arbeiten willst wirst du um ein Datenbanksystem nicht rum kommen.

Wenn es nicht zu groß wird kannst du aber sehr gut meine Lösung verwenden.
Du startest das Programm, gehst auf laden, wählst meine_daten1.dat aus und die Daten werden in das System geladen (z.B. in eine verkettete Liste oder in eine Baumstruktur).
Dann kannst du nach Daten suchen, diese ausgeben oder editieren, neue Daten eingeben, Daten löschen, sortieren,...
Am ende gehst du dann halt auf speichern und die Daten werden zurück in die Datei geschrieben.

Berufspenner
13-08-2003, 00:07
Original geschrieben von cybercrow
Also wenn du direkt in der "Datei" arbeiten willst wirst du um ein Datenbanksystem nicht rum kommen.

Wenn es nicht zu groß wird kannst du aber sehr gut meine Lösung verwenden.
Du startest das Programm, gehst auf laden, wählst meine_daten1.dat aus und die Daten werden in das System geladen (z.B. in eine verkettete Liste oder in eine Baumstruktur).
Dann kannst du nach Daten suchen, diese ausgeben oder editieren, neue Daten eingeben, Daten löschen, sortieren,...
Am ende gehst du dann halt auf speichern und die Daten werden zurück in die Datei geschrieben. So wie du das beschreibst kommt es mir vor, als wärest du ein Windows-User ;) Sollte jetzt aber keine Beleidigung sein :D ;)

Cu
André

cybercrow
13-08-2003, 00:09
Original geschrieben von Berufspenner
So wie du das beschreibst kommt es mir vor, als wärest du ein Windows-User ;) Sollte jetzt aber keine Beleidigung sein :D ;)


Wie kommst du darauf?
Jetzt hast du mich aber schon neugierig gemacht, welche Stelle hört sich denn danach an?

Berufspenner
13-08-2003, 00:14
Hi@all

Z.B.:
gehst auf laden
wählst meine_daten1.dat ausund
Am ende gehst du dann halt auf speichern So, als würde man sich an einem GUI entlang hangeln was für mich ein recht windowstypisches Verhalten darstellt :D

Cu
André

cybercrow
13-08-2003, 00:24
naja, ich wollte es auch für dich verständlich erklären :D ;)
Du hast doch mal linuxforeum geschrieben das du noch hauptsächlich windows verwendest, oder ;)

Aber es gibt doch auch unter GNU/Linux GUIs :)

Aber mal ernst, was hälts du von meinem Vorschlag? Was für Daten sollen das sein und wie groß wird so ein Datensatz ungefähr werden?

Berufspenner
13-08-2003, 00:44
Du hast doch mal linuxforeum geschrieben das du noch hauptsächlich windows verwendest, oder Naja, es sollte halt was shellbasiertes und systemunabhängig bzw. leicht portierbar werden; evtl. mit ncurses. Aber eigentlich nativ für Linux.
Aber mal ernst, was hälts du von meinem Vorschlag? Ich kann mir das im Moment schwer vorstellen, wie ich die Daten formatiert einlese und abspeicher. Hinzu kommt noch, dass das ganze dann auch recht träge wird, wenn immer mehr Daten geladen werden.
Was für Daten sollen das sein und wie groß wird so ein Datensatz ungefähr werden? Meinst du Datentypen oder generel?

Es wird wohl doch auf ein DB-Server Frontend hinauslaufen.

Cu
André

quinte17
13-08-2003, 07:36
du musst dich nicht um das format kümmern. denn du kannst ja structs auch direkt blockweise in eine datei reinschießen... da brauchst da dann nicht formatiert "parsen"...

siehe fread()//fwrite...

ich glaube hier hat noch keiner richtig verstanden was du willst...
wenn du ein db-system nachschreiben willst für dein prog, wie du es irgendwie angedeutet hast, so ist dass nicht leicht... weil bei indexen musst du immer darauf achten dass der scheiß sortiert ist, damit du schneller die daten findest.. oder machst es mit hashing, aber da hast dann wieder andere nachteile... und was ist wenn du einen datensatz in der mitte einfügen magst? dann musst du den ganzen index umwerfen... weil du ja nicht so viele zufällige festplattenzugriffe haben magst weil die ja lange dauern... undundund

sorry für mein ausschweifen, aber wie groß sind nun deine daten (viellecih in bytes oder mbytes)? oder ist es nicht abschätzbar wieviele datensätze in dein tool kommen sollen?

mfg

Berufspenner
13-08-2003, 12:00
Hi@all
ich glaube hier hat noch keiner richtig verstanden was du willst... Im Grunde genommen möchte ich ein zweidimensionales Array in einer Datei ablegen und zur laufzeit entscheiden können welches Feld ich abrufe oder editiere. Deswegen suche ich eine Möglichkeit der Formatierung um, ohne die Gesamte Datei einlesen zu müssen, in ihre selber schon duch eine Indizierung den/die richtigen Datensätze abzufragen.
aber wie groß sind nun deine daten Es werden wohl Daten vom Typen int und größer und Strings sein.
oder ist es nicht abschätzbar wieviele datensätze in dein tool kommen sollen? Nein, da die festgehaltenen Daten stetig mehr werden sollen.

Cu
André

cybercrow
13-08-2003, 12:14
Original geschrieben von Berufspenner
Hi@all Im Grunde genommen möchte ich ein zweidimensionales Array in einer Datei ablegen und zur laufzeit entscheiden können welches Feld ich abrufe oder editiere. Deswegen suche ich eine Möglichkeit der Formatierung um, ohne die Gesamte Datei einlesen zu müssen, in ihre selber schon duch eine Indizierung den/die richtigen Datensätze abzufragen.


Dann wirst du wohl um eine Datenbank nicht herum kommen, denn sowas in einer ASCII Datei zu machen ist sehr aufwendig und du wirst wahrscheinlich auch ziemlich schnell eine hohe Zeitkomplexität erreichen, da du in einer solchen Datei eigentlich nur linear arbeiten kannst.



Es werden wohl Daten vom Typen int und größer und Strings sein. Nein, da die festgehaltenen Daten stetig mehr werden sollen.


Aber du müsstest es doch ungefähr abschätzen können, je nachdem was für Daten es sind weißt du doch ungefähr wie schnell die anwachsen werden...

Also meine Methode kannst du gut bis in den 10000den Bereich verwenden, wahrscheinlich sogar in die 100000den herein.

Aber wie gesagt, wenn du wirklich in der Datei arbeiten willst, dann wirst du um eine Datenbank nicht herumkommen. Ansonsten müsstest du eine art Datenbank nachprogrammieren und das ist sicher keine kleine Aufgabe und ob die nachher auch nur annähernd so performant ist wie eine richtige Datenbank wage ich sehr zu bezweifeln.

Berufspenner
13-08-2003, 12:32
Hi@all

Gut, dann doch mit einem DB-Server im Hintergrund. Was mich dann aber nebenbei noch interessieren würde, wie das bei Verwaltungssoftware funktioniert. Also Programme, die z.B. Kundendaten verwalten? Haben die auch immer einen zentrallen DB-Server?

Cu
André

anda_skoa
13-08-2003, 13:04
Du brauchst nich unbedingt einen DB server.
Es gibt ja auch DB libs, die das in Flatfiles simulieren, CQL++ zum Beispiel.
Du kannst auch bei den Kexi Entwicklern nachfragen, wechles sie gerade benutzen, AFAIK sind die von CQÖ++ auf was anderes umgestiegen.

Ciao,
_