AGB  ·  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
Seite 2 von 3     12 3   
Foren-Tage 2017
DIE Konferenz für Delphi-Entwickler mit vielen Vorträgen und ganztägigen Workshops, veranstaltet u.A. von der Delphi-PRAXiS und Embarcadero.
21.-23. September 2017 in Hamburg · Mehr Infos unter forentage.de.
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.970 Beiträge
 
Delphi 2010 Professional
 
#11

Re: Textdatei als Datenbank nutzen

  Alt 19. Jan 2005, 11:16
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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Sleipnir181

Registriert seit: 14. Jul 2017
1 Beiträge
 
Delphi XE2 Professional
 
#12

AW: Textdatei als Datenbank nutzen

  Alt 14. Jul 2017, 13:47
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
Ulf
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
51 Beiträge
 
Delphi 2009 Professional
 
#13

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.
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
38.095 Beiträge
 
Delphi 10 Seattle Professional
 
#14

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
955 Beiträge
 
Delphi 10.1 Berlin Professional
 
#15

AW: Textdatei als Datenbank nutzen

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

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
5.545 Beiträge
 
Delphi 7 Personal
 
#16

AW: Textdatei als Datenbank nutzen

  Alt 14. Jul 2017, 20:43
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
Programme gehorchen nicht Deinen Absichten
sondern Deinen Anweisungen
Do it with Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.092 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#17

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
Japanurlaub 2015
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
3.597 Beiträge
 
Delphi 10.1 Berlin Professional
 
#18

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)
5.545 Beiträge
 
Delphi 7 Personal
 
#19

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
Do it with Delphi Programming
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
51 Beiträge
 
Delphi 2009 Professional
 
#20

AW: Textdatei als Datenbank nutzen

  Alt 16. Jul 2017, 16:44
Danke FAlter für den Hinweis mit CommaText und DelimitedText.
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
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:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf