AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Textdatei als Datenbank nutzen

Textdatei als Datenbank nutzen

Ein Thema von Opa Knack · begonnen am 17. Jan 2005 · letzter Beitrag vom 17. Jul 2017
Antwort Antwort
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.140 Beiträge
 
Delphi 2009 Professional
 
#1

AW: Textdatei als Datenbank nutzen

  Alt 14. Jul 2017, 14:13
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: 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.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.881 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Textdatei als Datenbank nutzen

  Alt 14. Jul 2017, 15:17
Man könnte auch ein CSVDataSet verwenden oder noch besser ein (embedded) DBMS.
Markus Kinzler
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.241 Beiträge
 
Delphi 12 Athens
 
#3

AW: Textdatei als Datenbank nutzen

  Alt 14. Jul 2017, 19:50
FdMemTable ?
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Textdatei als Datenbank nutzen

  Alt 15. Jul 2017, 07:14
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.
Felix Alter
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.470 Beiträge
 
Delphi 12 Athens
 
#5

AW: Textdatei als Datenbank nutzen

  Alt 15. Jul 2017, 08:30
Moin...
Zitat:
17. Jan 2005, 02:40
In den 12 Jahren hat sich einiges getan.
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.

Wie es die Andreren schon bemerkten:
Zitat:
Für komplexere Anwendungsfälle zum Speichern gerne ein DBMS

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

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. 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? Mit einer Datenbank hast du etwas mehr Lernaufwand. Wenn du aber die Vorteile erkannt hast, willst du es nicht mehr missen.

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

..jetzt hast du mal Brot.

Geändert von haentschman (15. Jul 2017 um 16:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Textdatei als Datenbank nutzen

  Alt 15. Jul 2017, 09:01
@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.
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.140 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Textdatei als Datenbank nutzen

  Alt 16. Jul 2017, 16:44
Danke FAlter für den Hinweis mit CommaText und DelimitedText.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Textdatei als Datenbank nutzen

  Alt 17. Jul 2017, 10:07
Danke FAlter für den Hinweis mit CommaText und DelimitedText.
Schau Dir mal folgendes an: http://www.delphipraxis.net/164041-c...ntdataset.html

Das ist ein einfacher Classhelper um CSV Dateien mit einem TClientDataset Lesen / Schreiben zu können.

Das habe ich dort auch mit 2 TStringList gemacht.

Delphi-Quellcode:
...
   // folgender Quelltext ist nur im Editor der DP geschrieben, nicht getestet ;)
   slFile := TStringList.Create;
   slRow := TStringList.Create;
   try
     slRow.Delimiter := ';';
     slRow.QuoteChar := '"';
     slRow.StrictDelimiter := True;
     slFile.LoadFromFile('C:\TEMP\TEST.CSV');

     for i := 0 to slFile.Count - 1 do
     begin
       slRow.DelimitedText := slFile[i];
       for j := 0 to slRow.Count - 1 do
       begin
         myArray[i,j] := slRow[j];
       end;
     end;
  finally
     slFile.Free;
     slRow.Free;
   end;
...
Das habe ich vor über 6 Jahren gemacht um leicht auf meine Logfiles zugreifen zu können.
Für die CodeLib hab ich dann noch das Schreiben implementiert.

Das Ganze dient aber auch als nettes Beispiel für einen ClassHelper
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz