Entwickler-Ecke
Dateizugriff - Eingabe in Textfile ausgeben ??
[SaWa]barrier23 - Do 02.03.06 13:06
Titel: Eingabe in Textfile ausgeben ??
ich würde gern ein kleines programm schreiben wo man besimmte dinge eingeben muss und das programm dann die eingegebenen werte in ein textfile speichert!
also zbsp im programm so
Label1 (zbsp. Name) : Edit1 (Zbsp Peter)
und im textfile soll es dann so aussehen
Name:Peter
ist das irgendwie für einen anfänger im delphi möglich?
Moderiert von
raziel: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 02.03.2006 um 12:23
mkinzler - Do 02.03.06 13:12
Ja, in eine Datei kannst du wie auf den Bildschirm mit write/Writeln schreiben.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var datei: TextFile; begin AssignFile( datei, 'datei.txt'); Rewrite( datei); Write( datei, Label1.Caption); Write( datei, ':'); WriteLn( datei, Edit1.Text); ... |
[SaWa]barrier23 - Do 02.03.06 13:23
klingt gut!
gleich mal ausprobieren!fragt er mich dann auch nach dem pfad wo er die datei anlegt oder legt er die automatisch in das programm verzeichniss?
mkinzler - Do 02.03.06 13:31
Er legt es in den aktuellen Pfad, was normalerweise das Verzeichnis der Anwendung ist. Wenn aber zwischenzeitlich der Pfad gewechselt wurde, legt er es dort ab. Wenn du erzwingen willst, daß die datei im Pfad der Exe angelegt wird, kannst du das durch Änderung auf ExtractFilePath( Application.ExeName)+'datei.txt' bewerkstelligen. Wenn du den Pfad auswählen willst verwende einen Filedialog.
[SaWa]barrier23 - Do 02.03.06 19:14
ok das funktiniert schon mal :)
nur wenn ich mein programm jetzt schließe und wieder aufmache will ich nicht das er die datei neu anlegt sondern unter dem text den er schon drin gespeichert hat weiter macht und nicht alles aus der datei löscht!
also sagen wir das programm schreibt den text "hallo" in die datei!dann schließe ich das programm!dann öffne ich es wieder und will das er "du" reinschreibt.also das dann "hallo du" drin steht.so wie es jetzt ist steht aber nur "du" drin
also hat wer eine lösung?
mkinzler - Do 02.03.06 19:48
Einfach das rewrite(...); durch append( ...); ersetzen
[SaWa]barrier23 - Do 02.03.06 20:12
ok thx und jetzt eins noch!
hab jetzt 2 eingabefenster
Name: Edit1
Nachname : Edit2
nur wenn er das jetzt so macht setzt er sie in der textdatei genau nebeneinander!
ich möchte aber das er sie auch untereinander setzt
also nicht
PeterLustig
sondern
Peter
Lustig
Sinspin - Do 02.03.06 20:20
verwende einfach anstatt von write(...) writeln(...). denn mit writeln(...) wird automatisch am ende der eingabe ein zeilenumbruch angehangen.
[SaWa]barrier23 - Do 02.03.06 20:35
jetzt hab ich ein neues problem!
Einfach das rewrite(...); durch append( ...); ersetzen
das hab ich gemacht nur wenn es die datei noch nicht gibt (sagen wir beim allerersten programm start) bringt er mir ologischer weise den fehler das es die datei noch nicht gibt!
wie umgehe ich das?
edit: jetzt bringt er mir auch bei vorhandener datei den fehler ?(
mkinzler - Do 02.03.06 21:01
Beim ersten mal muß Rewrite aufgerufen werden, da Append() ein Fehler bringt, wenn die Datei noch nicht existiert.
Das kannst du durch einfügen von
Delphi-Quelltext
1:
| if not FileExists( ...) then Rewrite(...) else Append(...); |
machen
[SaWa]barrier23 - Do 02.03.06 23:06
das will nicht so wirklich!
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var datei: TextFile; begin AssignFile( datei, 'datei.txt'); if not FileExists( datei) then Rewrite(datei) else Append(datei); Write( datei, Label1.Caption); Write( datei, ':'); Writeln( datei, Edit1.Text); |
was ist daran falsch?
Moderiert von
raziel: Quote- durch Delphi-Tags ersetzt
JayEff - Fr 03.03.06 03:37
Was auch nen Tick einfacher sein könnte:
TStringList.
TStringList kannst du wie die Lines Eigenschaft eines Memos benutzen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var s:TStringList; begin s:=TStringList.Creage; s.text:='hallo'; s.Add('hallo du'); s.SaveToFile('C:\asd.txt'); s.LoadFromFile('C:\asd.txt'); s.Free; end; |
[SaWa]barrier23 - Fr 03.03.06 18:55
kannst du mir den quelltext noch mal an meinem bsp posten?
also mit einem label und einem edit-fenster
nur zur infos ich habe nicht nur eine abfrage sondern 32 label und 32 editfenster!
Martin1966 - Fr 03.03.06 19:06
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var datei: TextFile; begin AssignFile( datei, 'datei.txt'); if not FileExists ('datei.txt') then Rewrite(datei) else Append(datei); Write( datei, Label1.Caption); Write( datei, ':'); Writeln( datei, Edit1.Text); |
[SaWa]barrier23 - Fr 03.03.06 23:53
machts auch.nur hab ich dann noch einen befehl das er alles löscht aber da gibts nenn fehler den ich noch sleber beheben kann!
nur wie mach ich es das er die textdatei mit dem name speichert den ich bei name eingegeben!
also name: peter
und die textdatei heißt dann peter.txt!
JayEff - Sa 04.03.06 01:24
Du wirst doch noch einen String zusammensetzen können? ;)
[SaWa]barrier23 - Sa 04.03.06 09:49
also so
Delphi-Quelltext
1: 2:
| AssignFile( datei, name+'.txt'); if not FileExists (name+'.txt') then Rewrite(datei) else Append(datei); |
aja mal offtopic!wie findet man den bbcode fürn delphi quelltext :(
Moderiert von
raziel: Delphi-Tags hinzugefügt
Blackheart666 - Sa 04.03.06 09:56
Klick mal Oben Rechts auf Hilfe dort wird alles beschrieben.
[SaWa]barrier23 - Sa 04.03.06 12:44
ok geht!könnte man den thread mal umbennen und mir die frage hier noch erklären!
wie kann ich die datei jetzt wieder laden?
also in der textdatei steht
Name: Peter
und dann soll er Peter ins Edit1 fenster laden
ist das ohne viel aufwand machbar?
Blackheart666 - Sa 04.03.06 15:11
Ich wusste das, das kommen würde.
Am besten Du schreibst mal was Du so allgemein vorhast, dann könnte man dir sagen was für dein Problem das einfachste ist aber Ich denke mal das mit der Stringlist solltest du dir genauer anschauen das wird dir sicher weiter helfen.
Oder schau mal nach Ini Dateien damit ist es auch sehr einfach.
[SaWa]barrier23 - Sa 04.03.06 18:17
jo ok
das ganze ist für eine handyübersicht gedacht die online gestellt werden soll und das sammeln der infos erleichtern soll!
und dann gibt man halt bei name :nokia 3210 ein,dann größe etc
nun findet man ja nicht immer alle angaben und dann speichert man und nimmt das nächste handy
jetzt findet man wieder neue infos
wenn man jetzt bei wieder nokia 3210 eingibt soll er dann automatisch die datein wieder laden und mann kann ergänzen!
alles verstanden?
Blackheart666 - So 05.03.06 10:42
Daraus wird man auch nicht ganz schlau, hier mal ein kleines Bsp.mit Ini vieleicht hilft dir ja das.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IniFiles;
type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Zuruecksetzen: TButton; Laden: TButton; Speichern: TButton; procedure ZuruecksetzenClick(Sender: TObject); procedure SpeichernClick(Sender: TObject); procedure LadenClick(Sender: TObject); procedure FormCreate(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ZuruecksetzenClick(Sender: TObject); begin Edit1.Clear; Edit2.Clear; Edit3.Clear; Edit4.Clear; Edit5.Clear; end;
procedure TForm1.SpeichernClick(Sender: TObject); var Ini: TIniFile; begin Ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Handy.ini'); with Ini do begin WriteString(Edit1.Text,'Name',Edit1.Text); WriteInteger(Edit1.Text,'Groesse',StrToInt(Edit2.Text)); WriteInteger(Edit1.Text, 'Gewicht',StrToInt(Edit3.Text)); WriteString(Edit1.Text,'Farbe',Edit4.Text); WriteInteger(Edit1.Text,'Preis',StrToInt(Edit5.Text)); end; Ini.Free; end;
procedure TForm1.LadenClick(Sender: TObject); var Ini: TIniFile; begin Ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Handy.ini'); with Ini do begin Edit1.Text:=ReadString(Edit1.Text,'Name','Kein Eintrag'); Edit2.Text:=IntToStr(ReadInteger(Edit1.Text,'Groesse',0)); Edit3.Text:=IntToStr(ReadInteger(Edit1.Text, 'Gewicht',0)); Edit4.Text:=ReadString(Edit1.Text,'Farbe','Kein Eintrag'); Edit5.Text:=IntToStr(ReadInteger(Edit1.Text,'Preis',0)); end; Ini.Free; end; end. |
[SaWa]barrier23 - So 05.03.06 23:38
ich probiers morgen mal!
sieht aber vertändlich aus! ;)
Blackheart666 - Mo 06.03.06 21:12
Hab extra den Edits etc. keine Namen gegeben, wiel Ich denke das verwirrt den (Anfänger) zu sehr.
jomeier85 - Di 07.03.06 00:42
Hallo
Also wenn ich das richtig sehe, willst du ne Datenbank mit Infos über Handys schreiben.
Dafür würde ich zunächst einmal die Einzelnen Infos in einem Record definieren. Etwa so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| Type THandy = RECORD Name : string; Hersteller : string; Preis : real; Kamera : boolean; end; |
Dann würde ich mit einem eigenen Dateityp arbeiten: z.B. *.han
Jetzt kannst du eine Variable einführen, die etzwa wie folgt aussieht:
Delphi-Quelltext
1:
| Var Handy : File of THandy |
In dieser Datei werden jetzt nur vollständige Datensätze vom typ THandy gespeichert.
Um diese zu verwalten, könntest du zum Beispiel beim öffnen der Datei die bereits vorhandenen Einträge in einfacher Form in einer ListBox ausgeben.
Will man nun einen Datensatz veränder wählt man ihn aus und verändert diesen.
Du solltest mit den folgenden Befehlen die Grundlagen zur Dateibehanbdlung kenne:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| AssignFile(File of Typ,Name) Rewrite(File of Typ) Reset(File of Typ) CloseFile(File of Typ) Seek(File of Type, Stelle) Append(File of Typ) Read(File of Typ, Text) ReadLn(File of Typ, Text) Write(File of Typ, Text) WriteLn(File of Typ, Text) FileSize(File of Typ) FilePos(File of Typ) Eof(File of Type) |
Ich hoffe das konnte dir weiterhelfen
mfg jomeier85
Sinspin - Di 07.03.06 18:24
@jomeier85, tschuldige das ich mich gerade vor unbehagen krümme!
ich dachte die erfindung mit der strukturierten textdatei wäre die lösung für sämmtliche probleme die beim speichern von daten via records und co auftreten können.
was soll zum beispiel passieren wenn irgendwann eine weitere eigenschaft hinzukommen soll? allen bestehenden daten müssen dann gelesen und wieder geschrieben werden. oder wenn auf einmal ein längerer name nötig wird. wobei noch zu erwähnen ist das das ganze mit dem generischen typen "string" nix wird!
ich finde die lösung mit der Ini datei ganz brauchbar. oder wenn man etwas anspruchsvolleres will kann man auch XML verwenden.
jedoch würde es auch reichen die werte alle als einfache strings zu speichern wobei alle daten eines handys in einer zeile gespeichert werden und die einzelnen werte mit einem sonst nicht in den werten vorkommendem zeichen voneinander getrennt werden.
eine ini datei hat allerdings den vorteil das sie einem das speichern und laden der datei abnimmt.
jomeier85 - Mi 08.03.06 10:49
ich gebe zu dass es bei der behandlung von ausschließlich strings sinnvoller ist textfiles zu benutzten.
zu dem ini file kann ich leider nicht s sagen, weil ich mir das tut noch nich durchgelesen habe, aber das klingt vielversprechend
mfg jomeier85
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!