Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Individuelle Dateinamen *.txt (https://www.delphipraxis.net/127340-individuelle-dateinamen-%2A-txt.html)

pcgamer03 11. Jan 2009 17:49


Individuelle Dateinamen *.txt
 
Hallo,

Ich bin grade dabei ein Programm zu schreiben, dass ähnlich wie eine Datenbank aufgebaut ist. Ich möchte eine "Partnervermittlung" programmieren, bei der die Persönlichen Daten (wie Alter, Name, Geschlecht und Interessen) in eine Textdatei gespeichert werden und dann später verglichen werden. Dafür würde ich gerne Dateien vom Programm anlegen lassen, die zum beispiel "MaxMustermann.Daten.txt" heißen, also der Inhalt des Edit1 Feldes im Dateiname vorkommt.
Ich habe mich schon durch mehrere Forenbeiträge Durchgelesen und in der Delphihilfe gesucht, bin jedoch auf kein ähnliches Problem gestoßen (zumindest keins mit verwendbaren Lösungsvorschlägen).

Falls das zu komplex sein sollte würden Dateinamen die einfach fortgesetzt werden auch gehen (z.B.: "Daten1.txt", "Daten2.txt", "Daten3.txt" usw.) in jeder Datei sollen nur die eingaben einer Person sein.
Die Ganzen eingegebenen Daten in die Textdatei zu bekommen ist kein problem. Das einzige Problem ist die Dateibennenung.

Ich benutze Delphi 5.

Vielen Dank schonmal für eure Hilfe.

pcgamer03

mkinzler 11. Jan 2009 17:52

Re: Individuelle Dateinamen *.txt
 
Das mit den benutzerdefinierten Dateinamen sollte kein Problem darstellen. Nur was passiert, wenn man den Inhalt von Edit1 ändert?
Warum keine Datenbank? Würde sich hier anbieten.

DeddyH 11. Jan 2009 17:54

Re: Individuelle Dateinamen *.txt
 
Erst einmal herzlich Willkommen in der DP :dp:,

ich würde auch zu einer DB raten, für solche Aufgaben ist das die einfachste und effizienteste Lösung. Was machst Du mit Deinen Textdateien, wenn zufällig 2 Leute gleich heißen? Die alte Datei überschreiben?

pcgamer03 11. Jan 2009 18:02

Re: Individuelle Dateinamen *.txt
 
Wie würde das denn aussehen? Der Inhalt von Edit1 soll ja geändert werden, immer wenn jemand seine Daten eingegeben hat sollen diese in einer neuen *.txt Datei gespeichert werden und diese dann abgeschlossen und unverändert auf der Festplatte bleiben. Der nächste der seine Daten eingibt soll wieder eine individuelle Datei erhalten und so weiter.

Sorry falls ich dich falsch verstanden hab oder so, aber ich bin eher Delphi-Anfänger und kenne mich kaum aus. Die meisten probleme löse ich mit einfachsten und (für euch wahrscheinlich primitiven) mitteln. ;-)

Das mit der Datenbank verstehe ich nicht. Was für eine Datenbank soll ich denn erstellen? (Das Programm so wie ich es mir vorstelle ist ja eigentlich eine (sehr einfache) Datenbank).

Gruß pcgamer03

edit @DeddyH da es eine sehr einfache Datenbank werden soll, die nur die Grundlagen für mich erfüllen soll gehe ich davon aus, dass sich maximal 20-30 Personen dort einspeichern. Es geht mir nur um die Grundlagen für so eine Partnervermittlung, Komplexeres werde ich mir später anschauen. ;-)

mkinzler 11. Jan 2009 18:10

Re: Individuelle Dateinamen *.txt
 
Nur Nachträglich kann man dann nichts mehr Ändern.
Aber du willst ja einfach Übereinstimmungen von Personen finden. Dafür sind Datenbanken nun mal gemacht. Das was jetzt im ersten Moment für die einfacher scheint ( Textdateien), erweisst sich schnell als komplexer als ein fertiges Syste ( DBMS) zur verwenden, was vielleicht etwas mehr Einarbeitung benötigt.

khh 11. Jan 2009 18:12

Re: Individuelle Dateinamen *.txt
 
schaue dir mal diverse Abhandlungen über relationale Datenbanken an.

z.B. hier:

Relationale DB


gruss KH

pcgamer03 11. Jan 2009 18:20

Re: Individuelle Dateinamen *.txt
 
Ja das ist natürlich einfacher, jedoch ist das ein Schulprojekt, in dem wir das Programm selbst entwickeln sollen und keine Vorgefertigten Programme (das wäre ja sowas wie die DBMS oder!?). Das Problem ist irgendwie, dass wir selbst eigentlich zu wenig Hintergrundwissen in Delphi haben und alles was ich mit Delphi kann mir selbst eigentlich durch diverse Internetforen angeeignet habe. Unser Lehrer konnte uns bei dem Problem selbst auch nicht weiterhelfen, was ich natürlich sehr toll finde, dass er selbst nicht weiß wie es geht aber von uns verlangt soetwas zu machen.

Gruß pcgamer03

Blackheart 11. Jan 2009 18:21

Re: Individuelle Dateinamen *.txt
 
Wenn es nur 20 - 30 Datensätze sollten Records schon ausreichend oder Ini Dateien.
Tutorial hier.Ini Tutorial
Hier hatt Ich ein kleines Demo angehangen vieleicht hilts ja.
Demo Ini

DeddyH 11. Jan 2009 18:29

Re: Individuelle Dateinamen *.txt
 
Ich spinne jetzt mal ein wenig herum und bilde ein solches Datenbankmodell in Textdateien (genauer: Inis) ab.
Männer-Ini:
Code:
[1] //eindeutiger Schlüssel
Name=Mustermann
Vorname=Max

[2]
Name=Wurst
Vorname=Hans

//usw.
Frauen-Ini:
Code:
[1] //wieder eindeutiger Schlüssel
Name=Korn
Vorname=Klara

[2]
Name=Knödelwerfer
Vorname=Eleonore

//usw.
Zuordnungs-Ini (Männer links, Frauen rechts):
Code:
1=2
2=1
2=2
//usw.
So macht man das in einer Datenbank (m:n-Beziehung). Um nun herauszubekommen, wer sich für wen interessiert, schaust Du in der Zuordnungsdatei nach. Allerdings kann es passieren, dass Du z.B. eine Frau löschen willst, für die sich noch mindestens ein Mann interessiert. Was nun? Wenn Dich das nicht juckt, hast Du irgendwann jede Menge "Leichen" in der Zuordnungsdatei, die das ganze Programm unnötig langsam machen. Und falls doch, musst Du erst einmal nachsehen, ob zu der zu löschenden Person noch korrespondierende Datensätze in der Zuordnungsdatei vorhanden sind.

Diese ganze Funktionalität ist in einem DBMS, das diesen Namen auch verdient (dBase fällt also flach), bereits vorhanden, deshalb auch unser Rat, gleich auf eine Datenbank zu setzen.

pcgamer03 11. Jan 2009 19:56

Re: Individuelle Dateinamen *.txt
 
Hallo,

Danke erstmal für eure schnelle Antwort.
Ich werde das mit der .ini Datei mal ausprobieren. Könnt ihr mir bitte trotzdem schreiben, wie man soe eine Datei "edit1.Daten.txt" erstellen könnte? vielleicht bekomme ich es so doch hin. außerdem wäre es ja vielleicht für nächste Projekte ganz hilfreich.
Ich entschuldige mich nochmal für meine unwissenheit und melde mich sobald ich weitergekommen bin.

Vielen Dank,
pcgamer03

mkinzler 11. Jan 2009 20:00

Re: Individuelle Dateinamen *.txt
 
Delphi-Quellcode:
FileName := Edit1.Text + '.Daten.txt';

AssignFile( f, FileName);

pcgamer03 11. Jan 2009 20:16

Re: Individuelle Dateinamen *.txt
 
Okay. das sieht ja relativ logisch aus. habe jetzt versucht das zu programmieren:
Delphi-Quellcode:
var Daten:textfile; FileName:string;
begin
  FileName := Edit1.Text + '.Daten.Text';
  Createfile(Daten, 'D:\\FileName')
  AssignFile(Daten, FileName);
so würde jetzt bei mir der teil zum erstellen aussehen. das funktioniert aber nicht da in der zeile "createfile" ein fehler kommt. "Inkompatibele Typen Text und PChar"

mkinzler 11. Jan 2009 20:20

Re: Individuelle Dateinamen *.txt
 
AssignFile() setzt den Dateinamen. Mit Rewrite() wird diese dann zum Schreiben geöffnet/erzeugt.

pcgamer03 11. Jan 2009 20:53

Re: Individuelle Dateinamen *.txt
 
okay soweit so gut! vielen dank erstmal dafür! ist schon bitter, dass ich für diese Paar zeilen insgesamt ca. 10 Std. im Internet recherchiert habe. DANKE!

nun zu meinem nächsten problem. (Tut mir leid :oops: ;-) )

ich möchte jetzt die 10 datein die dadurch erstellt wurden (mit infos wie "alter, geschlecht, hobbies, gesuchtes geschlecht, gesuchtes alter usw.) miteinander vergleichen und die mit den größten übereinstimmung in alter/gesuchtes alter, hobbies und geschlecht/gesuchtes geschlecht zusammen ausgeben also z.b. "Max Mustermann passt zu Karl Heinz".
ich habe in einem forum gelesen dass man das mit einer strlist machen kann. was würdet ihr vorschlagen?

die *.txt dateien die angelegt wurden sehen so aus:

Name:Mustermann
Vorname:Max
Alter:22
Geschlecht:männlich
Chillen:0
Sport:1
Kultur:1
Lesen:1
Parties:0
SucheMin:18
SucheMax:24
SucheGeschlecht:weiblich

nochmal danke (du hast mir sehr weiter geholfen!) :-)

mkinzler 11. Jan 2009 21:10

Re: Individuelle Dateinamen *.txt
 
Delphi-Quellcode:
sl: TStrings;
...
  sl := TStringList.Create;
  sl.LoadFromFile( Filename);
  Name := sl.Values['Name'];
  ...
  sl.Free;

pcgamer03 11. Jan 2009 21:36

Re: Individuelle Dateinamen *.txt
 
also das erste soll die variable sein?

dann wird eine Stringlist erstellt und ladet die daten aus einer bestimmten Datei (in dem fall sollte sie die daten der person die einen partner sucht laden, also edit1.text + '.daten.text') und mit allen anderen *.txt datein in dem ordner vergleichen.
wie kann man die anderen daten in strlists laden und mit der aktuellen vergleichen?
und wie kann ich das machen, dass z.b. alle treffer ab 80% ausgegeben werden (100%ige übereinstimmung ist ja eher selten)?

mein quelltext für den button "Partner Suchen" sieht bis jetzt so aus:

Delphi-Quellcode:
var strlist:TStringList; sl:TStrings; FileName:string; Daten:textfile;
begin
   sl := TStringList.Create;
   FileName := Edit1.Text + '.Daten.Text';
   sl.LoadFromFile(FileName);
   sl.Free;
Gruß pcgamer03

mkinzler 11. Jan 2009 21:41

Re: Individuelle Dateinamen *.txt
 
sl ist die StringListe. (TStrings ist virtueller Basistyp)
Die eingegeben Daten kannst du einfach mit
Delphi-Quellcode:
<StringList>.Add( 'Name='+Edit1.Text);
<StringList>.Add( 'Vorname='+Edit2.Text);
...
<StringList>.SaveToFile( Edit1.Text+'Daten.txt');

pcgamer03 11. Jan 2009 23:20

Re: Individuelle Dateinamen *.txt
 
Das ist doch eigentlich das gleiche wie das was ich Vorher schon habe nur mit einer Stringlist, oder?
Ich möchte ja jetzt alle Textdatein mit den Daten aus der Stringlist vergleichen.
Muss ich das mit read(Daten) machen oder wie geht das?

mkinzler 12. Jan 2009 05:37

Re: Individuelle Dateinamen *.txt
 
Nacheinander alle Einlesen Datein in Strimgliste und mit der aktuellen vergleichen. Einfacher wäre es wie gesagt, bei der Verwendung einer Datenbank.

pcgamer03 12. Jan 2009 20:07

Re: Individuelle Dateinamen *.txt
 
Also entweder war das jetzt ein Missverständnis oder ich bin doof! ;-) :oops:
Das was du jetzt geschrieben hast bringt mir doch nur was zum "manuellen" vergleichen, also SELBST vergleichen. Ich möchte, dass das Programm die Dateien einliest und automatisch miteinander vergleicht. Tut mir leid dass ich das so kompliziert machen muss aber Datenbanken dürfen wir nicht verwenden.
Also ich suche quasi den/die Befehl/e zum vergleichen.

Liebe Grüße,
pcgamer03

ryLIX 12. Jan 2009 21:04

Re: Individuelle Dateinamen *.txt
 
Muss es denn unbedingt eine txt Datei sein?

XML würde sich hier anbieten und dann die Daten in ein Array laden das kannst du dann mit einer for Schleife durchlaufen und mit einem anderen Datensatz vergleichen.

Die Einzigartigkeit der Dateinamen kannst du durch hinzufügen eines Zeitstempels erreichen als Beispiel.

pcgamer03 12. Jan 2009 22:16

Re: Individuelle Dateinamen *.txt
 
Dann müsste ich aber alles nochmal umprogrammieren oder?
Wäre das viel Arbeit? (das Projekt sollte bis Mittwoch fertig sein)
Wie würde das denn gehen (vom Prinzip her) wie mit einer txt datei, oder wie kann ich da die Daten speichern?

Danke.

mkinzler 13. Jan 2009 05:34

Re: Individuelle Dateinamen *.txt
 
Primär ist ja die Speicherform ( Txt, Ini, XML) egal. Aber auf das manuelle Vergleichen wirst du nicht herumkommen

guidok 13. Jan 2009 06:00

Re: Individuelle Dateinamen *.txt
 
Zitat:

Zitat von pcgamer03
Das was du jetzt geschrieben hast bringt mir doch nur was zum "manuellen" vergleichen, also SELBST vergleichen. Ich möchte, dass das Programm die Dateien einliest und automatisch miteinander vergleicht.

Nimm doch einfach die TPartnervermittlungs Komponente, die macht alles das, was du brauchst :wink:

Scherz beiseite, es geht hier um das Programmieren und da wirst du wohl nicht drum rum kommen, auch selbst ein paar Zeilen Code zu schreiben. Es ist übrigens unglaublich wichtig, sich VORHER zu überlegen, wie man die Daten strukturiert, um damit später auf simplen Wege die benötigten Operationen (z.B. Vergleichen) durchführen zu können. Es gibt zwar viele Wege, die nach Rom führen, aber manche sind schon sehr steinig...

ryLIX 13. Jan 2009 11:56

Re: Individuelle Dateinamen *.txt
 
Bei XML kannst du auf mehrere Dateien verzichten.
Da du den Aufbau innerhalb der XML so legen kannst das du alle "Kunden" in einer Datei speicherst.

XML-Code:
<rootnode>
  <subnode>
    <entry1></entry1>
    <entry2></entry2>
    <entry3></entry3>
  </subnode>
  <subnode>
    <entry1></entry1>
    <entry2></entry2>
    <entry3></entry3>
  </subnode>
    .
    .
    .
  <subnode>
    <entry1></entry1>
    <entry2></entry2>
    <entry3></entry3>
  </subnode>
</rootnode>
Nun brauchst du ein Array welches alle eigentschaften speichern kann.
Dann kannst du die einzelnen Kunden untereinander vergleichen lassen.
Ob du nun genug Zeit hast den Code dafür fertig zustellen weiß ich nicht.
Aber das wäre die beste Lösung ohne auf Datenbanksysteme zurück zugreifen.
Theoretisch könnte man behaupten es wäre SQLXML aber ich denke das wird nicht auffallen in der Schule ;)

Hier noch ein wenig Material für dich:
OpenXML Tutorial
Noch ein XML Tutorial
Hier im Forum suchenXML

pcgamer03 14. Jan 2009 16:32

Re: Individuelle Dateinamen *.txt
 
So, haben das Programm heute vorgestellt und dazu gesagt, dass wir das mit dem vergleichen nicht hinbekommen haben. Ist kein Drama, da ers ja auch net kann.

Vielen dank an euch alle für eure Hilfe!

LG,
pcgamer03

DeddyH 14. Jan 2009 16:34

Re: Individuelle Dateinamen *.txt
 
Zitat:

Zitat von pcgamer03
Ist kein Drama, da ers ja auch net kann.

:wall: Vielleicht doch eine gute Idee, dass die Regierung mehr in Bildung investieren will.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:52 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