Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Textdatei als Datenbank nutzen (https://www.delphipraxis.net/38280-textdatei-als-datenbank-nutzen.html)

MrSpock 19. Jan 2005 11:16

Re: Textdatei als Datenbank nutzen
 
Hallo Robert,

es spricht absolut nicht dagegen mit Records zu arbeiten. Man kann ja eine Klasse schreiben, die einige nützliche Funktionen auf diesen Records kapselt. Wenn du mit Datenbanken arbeitest, bekommst du ja die Daten auch in einer Datenmenge, die keine Klasse ist, sondern du musst die Daten erst noch verarbeiten, bis du sie weiterverwenden kannst. Eine Erweiterung ist auch kein großes Problem. Ein Konvertieren der Daten sollte bei kleinen Änderungen in wenigen Minuten programmiert sein.

Natürlich halte ich Datenbanken für besser geeignet, aber typisierte Dateien sind aus meiner Sicht keine schlechte Lösung, wenn man keine DBs will.

Sleipnir181 14. Jul 2017 13:47

AW: Textdatei als Datenbank nutzen
 
Hallo,
ich hänge mich einfach mal an diesen alten Post ran, da es bei mir um was ähnliches geht.

Ich bin ein Delphi Anfänger.

Nun wollte ich ein Programm schreiben, in welchem eine Art Rezept erstellt wird.

Es gibt bestimmte Zutaten mit verschiedenen eigenschaften. zB.: Eier : 100% Protein, xx% Fett usw...
Diese Daten würde ich gerne in einer .txt Datei oder so ähnlich gespeichert haben. In dem Programm stehen die verschiedenen möglichen Zutaten und man muss dort die Menge eingeben.
Wenn man das für alle Zutaten gemacht hat klickt man auf einen button und bekommt eine Ausgabe mit dem gesamt Proteingehalt, gesamt Fettgehalt usw.

das ist der Grundgedanke.
Nunweiß ich jedoch nicht, wie ich diese txt Datei (oder ähnliches) in das programm einbinde etc.

Kann mir da evtl jemand behilflich sein?

Grüße
Ulf

Redeemer 14. Jul 2017 14:13

AW: Textdatei als Datenbank nutzen
 
Das Dateiformat wird in der Regel CSV sein. Entgegen des Namens benutzt man meistens Semikolons zur Trennung. Auch Excel tut das.

Hier ein paar sehr einfache Funktionen aus meinen Projekten, mit Sicherheit verbesserungsfähig aber sie sollten dir helfen.

Einen Typ für ein dynamisches zweidimensionales Array erstellen, macht Zuweisungen einfach:
Delphi-Quellcode:
type TString2D = array of array of string;
Database: TStrings2D;
Eine Funktion zum Auslesen der CSV-Daten einer TStringList (Fields = Anzahl der Spalten).
Delphi-Quellcode:
procedure InitDatabase();
function CSVToArray(Input: TStrings; Fields: Integer): TString2D;
var
  i, j, k, l: Integer;
  s: string;
begin
  i := Input.Count;
  SetLength(Result, i);
  j := 0;
  repeat
    s := Input.Strings[0];
    l := 0;
    SetLength(Result[j], Fields);
    for k := 1 to Length(s) do
    if s[k] = ';' then
    inc(l)
    else
    Result[j][l] := Result[j][l] + s[k];
    inc(j);
    Input.Delete(0);
    dec(i);
    if i = 1 then
    s := '';
  until i = 0;
end;
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    sl.LoadFromFile('database.csv');
    Database := CSVToArray(sl, 42); // 42 ändern zur Anzahl der maximal genutzten Spalten
  finally
    sl.Free;
  end;
end;
Anschließend kann man auf die Strings zugreifen:
Delphi-Quellcode:
Database[1][0]
(erste Spalte des zweiten Datensatzes)
Wichtig ist, dass es zunächst mal alles Strings sind, man sie also ggf. in Zahlen umwandeln muss, um damit zu rechnen.

Die Funktion unterstützt keine Quantifiers, sprich du solltest keine Semikolons in deinen Einträgen verwenden.

mkinzler 14. Jul 2017 15:17

AW: Textdatei als Datenbank nutzen
 
Man könnte auch ein CSVDataSet verwenden oder noch besser ein (embedded) DBMS.

Rollo62 14. Jul 2017 19:50

AW: Textdatei als Datenbank nutzen
 
FdMemTable ?

p80286 14. Jul 2017 20:43

AW: Textdatei als Datenbank nutzen
 
Zitat:

Zitat von Sleipnir181 (Beitrag 1376726)
Nunweiß ich jedoch nicht, wie ich diese txt Datei (oder ähnliches) in das programm einbinde etc.

Wenn Du Dich etwas detailierter äussern würdest, wäre es etwas einfacher Dir einen Tip zu geben.
Soll direkt auf die Textdatei zugegriffen werden, wären Datensätze mit fixer Satzlänge meine erste Wahl. Willst Du eine interne Struktur (z.B. TList) mit Daten füllen, ist CSV keine schlechte Wahl.
Was das Einbinden angeht, kommt es auf die konkreten Anforderungen an.

Gruß
K-H

FAlter 15. Jul 2017 07:14

AW: Textdatei als Datenbank nutzen
 
Zitat:

Zitat von Redeemer (Beitrag 1376733)
Eine Funktion zum Auslesen der CSV-Daten einer TStringList (Fields = Anzahl der Spalten).

Eine zweite StringList nehmen und den Inhalt CommaText (für echtes CSV mit Komma) oder DelimitedText (Trennzeichen beliebig festlegbar) zuweisen. Dann enthält die zweite StringList die Werte der Zeile als einzelne Einträge.

Zitat:

Die Funktion unterstützt keine Quantifiers, sprich du solltest keine Semikolons in deinen Einträgen verwenden.
Das Problem wäre damit auch gelöst. Die RTL kann das alles schon.

Für komplexere Anwendungsfälle zum Speichern gerne ein DBMS. CSV wird aber auch extrem gerne als Datenaustauschformat verwendet, z.B. für Schnittstellen oder Migrationen.

haentschman 15. Jul 2017 08:30

AW: Textdatei als Datenbank nutzen
 
Moin...:P
Zitat:

17. Jan 2005, 02:40
In den 12 Jahren hat sich einiges getan. 8-)
Zitat:

Es gibt bestimmte Zutaten mit verschiedenen eigenschaften. zB.: Eier : 100% Protein, xx% Fett usw...
Das sind Daten für ein klassisches DBMS. Die Datenbanken sind dafür ausgelegt Daten "herauszusuchen". Mal angenommen, du willst eine Liste mit den Rezepten haben, sortiert nach der Fettmenge. Mir einer TXT/CSV/XML hast du mehr Aufwand als nötig.
Meine Daumenregel:
TXT/CSV/XML als Datenaustauschformat ist in Ordnung wenn die Daten nur readonly sind. Alles Andere gehört in ein DBMS. :thumb:

Wie es die Andreren schon bemerkten:
Zitat:

Für komplexere Anwendungsfälle zum Speichern gerne ein DBMS
:thumb:
Zitat:

Willst Du eine interne Struktur (z.B. TList) mit Daten füllen, ist CSV keine schlechte Wahl.
! nur readonly :thumb:

Empfehlung für ein DBMS:
Firebird:
https://de.wikipedia.org/wiki/Firebird_(Datenbank)
https://www.firebirdsql.org/en/server-packages/ für den Anfang die Version 2.5
Firebird Vorteile:
* minimaler Installationsaufwand (ca. 10 Minuten)
* Ein Datenbankfile.
* Das Datenbankfile kann man z.b. auf einen USB Stick kopieren und wieder zurück.
* Wechsel zwischen Multiuser und Einzelplatz ohne Aufwand möglich.
Datenzugriff
* Zeos: https://sourceforge.net/projects/zeoslib/
* Tutorial: https://www.delphi-treff.de/tutorial...-und-firebird/
Admin Tool
* IBExpert Personal: http://ibexpert.net/IBE/index.php?n=...ersonalEdition
Datenbank Tutorial
* ! es geht nur ums Prinzip. :wink: https://www.youtube.com/watch?v=eNWqPw_73vU ...und folgende.

Zitat:

Diese Daten würde ich gerne in einer .txt Datei oder so ähnlich gespeichert haben.
Ein Tretauto ist auch ein Auto. Aber würdest damit in den Urlaub fahren? :stupid: Mit einer Datenbank hast du etwas mehr Lernaufwand. Wenn du aber die Vorteile erkannt hast, willst du es nicht mehr missen. :zwinker:

Stichworte:
http://docwiki.embarcadero.com/Libra...ta.DB.TDataSet
http://docwiki.embarcadero.com/Libra...DB.TDataSource

..jetzt hast du mal Brot. :thumb:

p80286 15. Jul 2017 09:01

AW: Textdatei als Datenbank nutzen
 
@haentschman
Ich vermute, er scheut den "Aufwand" für eine DB, und leider hast Du die notwendigen Komponenten für den DB-Zugriff erst ab Prof. an Bord. Da schreckt man schon mal gerne zurück.

Gruß
K-H

P.S.
Gerade gesehen, er hat ja die prof Version, da sollte es ja gut gehen.

Redeemer 16. Jul 2017 16:44

AW: Textdatei als Datenbank nutzen
 
Danke FAlter für den Hinweis mit CommaText und DelimitedText.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz