| |
|
|
Michael Gregor | Hallo,
ich kann hier mal Hilfe gebrauchen...
Ich möchte gerne eine kleine Datenbank programmieren, die mit CSV Dateien auskommt, d.h. diese lesen und auch schreiben kann. Ähnlich wie die listview.dll, die ich jedoch nicht verwenden möchte.
Zudem sollte es möglich sein, verschiedene Datenbanken innerhalb eines Programmes aufzurufen. Auch wäre es nützlich, wenn man zu bestimmten Einträgen bei Bedarf Bilder mit anzeigen lassen kann (am besten wäre aber eine Methode, die alle für die DB benötigten Bilder in eine einzige Datei packt und die DB diese dann auch verwenden kann).
CSV deshalb, weil dieses Format meine (nicht all zu großen) Ansprüche voll erfüllt und auch von Dritten erweitert werden kann.
Das soll mein erstes kleines Projekt werden, daher wende ich mich hilfesuchend an Euch hier. Vielleicht kommt ja was nützliches dabei raus, wenn alle ein wenig anpacken |
|
|
| |
|
|
|
| Die CSV-Variante hat wie jede andere Variante seine Vor- und Nachteile.
Ich würde vorschlagen wir bauen eine inc, welche ja bei Bedarf auch zu einer PCU kompiliert werden kann.
Also eine CSVDB.INC
Ich würde auch vorschlagen, die include nur unter Verwendung des neuesten offiziellen XProfans herzustellen. Im Moment ist dies wohl XProfan9.
Ich stelle mal in den Raum das wir im Prinzip nur 2 Befehle benötigen. Ein Befehl zum Lesen,- ein anderer zum Schreiben.
Und da fällt mir auch schon die file.pcu ein - welche unter Units zum Download bereitsteht.
Diese hat unter Anderem zwei Befehle: freadline & fwriteline.
freadline (a(string),b(longint)) ließt aus Datei a Zeile b aus und gibt den Inhalt als String zurück.
fwriteline(a(string),b(longint),c(string)) überschreibt in Datei a die Zeile b mit dem String c.
Nun, da csv bekanntlich mehere Spalten mit einem Separator (in meinem Beispiel ;) getrennt enthalten kann, sollte diese Option unter Verwendung der beiden o.g. Befehle leicht adaptierbar sein.
Also: KompilierenMarkierenSeparieren {$compiler p9}
{$runtime p9}
$U file.pcu = csvf
proc csvdb.read
parameters fle$,x&,y&
return substr$(csvfreadline(fle$,y&),x&,;)
endproc
proc csvdb.write
parameters fle$,x&,y&,s$
case csvfwriteline (fle$,y&,setsubstr(csvfreadline(fle$,y&),x&,s$)) : return 1
return 0
endproc
proc setsubstr
parameters f$,p&,t$
declare s$,c&
c&=0
s$=
casenot mid$(f$,len(f$),1)=; : f$=f$+;
while len(f$)
inc c&
if (c&=p&)
s$=s$+t$+;
else
s$=s$+mid$(f$,1,instr(;,f$))
endif
f$=del$(f$,1,instr(;,f$))
ifnot len(f$)
case c&<p& : f$=f$+;
endif
wend
return s$
endproc
cls
csvdb.write test.csv,1,1,Name:
csvdb.write test.csv,1,2,Vorname:
csvdb.write test.csv,2,1,Glück
csvdb.write test.csv,2,2,Hans
print csvdb.read(test.csv,1,1) + csvdb.read(test.csv,2,1)
print csvdb.read(test.csv,1,2) + csvdb.read(test.csv,2,2)
waitkey
end
So, habs getestet und es funzt auch primast.
Da haddu ne mini-csv-db.
Salve, iF |
|
|
| |
|
|
|
| Na Gregor - funzt es? :roll:
Ists nichn kleines Beispiel was Du wolltest?
Kleines Feedgebäck wär schön.
Salve, iF |
|
|
| |
|
|
|
Michael Gregor | Hallo,
nein leider nicht...
Hab ja erstens kein profan 9 und zweitens konnte ich die genannte Unit im Download Bereich nicht finden... |
|
|
| |
|
|
|
| Ich schrieb nicht die Unit sei im Downloadbereich zu finden - sondern die Unit sei unter Units zum Download angeboten.
Einfach links-oben auf Units klicken.
Kein XProfan9 :roll:
Leider steht in Deiner Signatur hier nicht welche Profanversion Du nutzt - deshalb schrieb ichs auch in X9.
Schreib mal hier hinein welche Profanversion Du nutzt: [...]
Sag doch - welches Profan nutzt Du?
Salve, iF |
|
|
| |
|
|
|
Michael Gregor | Ich schau gleich mal bei Units nach. Das letzte mal schaute ich auch dort nach, und dort war es nicht zu finden. Vielleicht hab ich diesmal mehr Glück
Ich nutze noch immer die Profan 8 Shareware, die du mir mal gegeben hast |
|
|
| |
|
|
|
Michael Gregor | Ah wer suchet der findet. Hätte wohl lieber zweimal hinschauen sollen |
|
|
| |
|
|
|
Frank Abbing | Hallo Michael,
ich würde die Datei immer im Speicher bilden und später als Ganzes speichern. Reserviere genügend Speicher und bastle deine Datei (Anzahl generierter Bytes merken!). Als Spaltentrenner am besten das Semikolon verwenden, die Texte solltest du in Anführungszeichen setzen. Zeilentrenner ist Chr$(13)+Chr$(10). Um Bilder zu integrieren, benutzt du vielleicht einen Erkennungsstring mit angehängtem Dateinamen und schliesslich dem eigentlichen Text, z.B. <<<</Icons/Guckmal.ico>>>>Hier steht der Text. Beachte aber, das andere Programme so ein erweitertes CSV-Format nicht richtig lesen können... Und um die Suchstrings zu finden empfiehlt sich die API lstrcmpi() aus der Kernel32.
Warum möchtest du die Listview.dll nicht verwenden? Gerade für sowas hab ich sie gemacht. |
|
|
| |
|
|
|
Michael Gregor | Hätte ich etwas größeres und konkreteres, würde ich die listview.dll sicherlich sogar verwenden.
Ich spiele hier aber momentan nur ein wenig mit der Profan Shareware herum, um zu sehen, was ich so machen kann und ob ich überhaupt etwas damit hinbekomme. Und ich weiß noch nicht, ob ich das alles nicht evtl. wieder verwerfe und mich anderen Dingen zuwende. Zudem kann die listview.dll viel viel viel mehr als ich brauche ;) ich wollte einfach vorerst nur mal testen, ob ich auch so, auf einfache Weise, mit CSVs (oder anderen Datenformaten) hantieren kann. Aber ich danke euch sehr für eure Hilfe! |
|
|
| |
|
|
|
Michael Gregor | Hallo Frank,
nachdem ich mir mal die Beispiele mit der listview.dll angesehen habe, merke ich so langsam, dass ich die wohl doch sehr wohl gut gebrauchen kann ;)
Kann also gut sein, dass du bald mal ein neues Registrierersuchen bekommst ;)
Aber erstmal muss ich überhaupt mal damit anfangen, in Profan durchzusteigen. Denn noch ist das alles garnicht so einfach für mich. Momentan bin ich noch dabei, deine Beispiel-Quellcodes durchzustöbern, in der Hoffnung, da bald durchzusteigen. Als Anfänger ist das alles noch nicht ganz so einfach.
Gruß |
|
|
| |
|
|
|
| Franks Listview.dll ist meisterhaft und eine absolute Empfehlung.
Da die dll mit samt allen Befehlen auch aus so ziemlich jeder Programmiersprache aufrufbar ist kann man sich mit ruhigem Gewissen bei Frank registrieren und weiß einen starken Helfer (listview.dll) an der Seite zu haben.
Salve, iF |
|
|
| |
|
|
|
Frank Abbing | Hi,
Aber erstmal muss ich überhaupt mal damit anfangen, in Profan durchzusteigen. Denn noch ist das alles garnicht so einfach für mich. Momentan bin ich noch dabei, deine Beispiel-Quellcodes durchzustöbern, in der Hoffnung, da bald durchzusteigen. Als Anfänger ist das alles noch nicht ganz so einfach.
Lass dir Zeit beim Lernen. Das ist wichtig. Fang mit den Sachen an, die dir am meisten Spass machen und beginne einfach, selber kleine Quellcodes zu erstellen.
iF: |
|
|
| |
|
|