Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - [TEdit] Wert in .txt. speichern
ConditionZero - Mo 25.12.06 16:44
Titel: [TEdit] Wert in .txt. speichern
tach,
Ich will ein Trainer machen, wo man Fragen und Antworten eingeben kann und man sich später die Fragen abfragen kann... Jetzt will ich es so das wenn man eine Neue Frage hinzufügen will, das Thema der Frage eingeben soll, z.B. Mathematik etc. Das kann man dann in Edit's eingeben alles und ich will es so machen, dass eine Textdatei erstellt wird für jedes Thema also z.B. eine Textdatei die Mathematik.txt heißt und dann die erste Zeile eine Frage ist, die zweite Zeile die dazugehörende Antwort dann die 3. Zeile eine neue Frage usw... Meine Frage: Wie kann ich denn eine Textdatei anlegen welche den Namen vom Wert Edit1.Text hat? Ich kannte das bisher nur aus TStringGrids mit SaveToFile diese Funktion gibt es aber nicht bei Edit's und Memo's.
LG
Marco D. - Mo 25.12.06 17:04
Memo1.Lines.SaveToFile gibt es. Du kannst den String eines Edits entweder per FileStream speichern oder die SaveToFile-Methode einer Stringlist benutzen. ;)
ConditionZero - Mo 25.12.06 17:12
öhm wäre ganz doll nett wenn du mir en konkretes beispiel zu FileStream geben kannst, ich blick die methode nicht so ganz :)
jaenicke - Mo 25.12.06 17:22
Du kannst zum Beispiel eine TStringList benutzen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var tmp: TStringList; begin tmp := TStringList.Create; tmp.Add(edtDeinEdit.Text); tmp.Add(edtNochEinEdit.Text); tmp.SaveToFile(ExtractFilePath(ParamStr(0)) + '\test.txt'); tmp.Free; end; |
Ein FileStream ist für Strings dann doch eher ungeeignet. (Es sei denn man nimmt einen ShortString mit einer festen Länge bis 255 Zeichen natürlich.)
ConditionZero - Mo 25.12.06 17:45
ok es klappt bis auf die tatsache das, wenn ich
Delphi-Quelltext
1:
| tmp.SaveToFile(ExtractFilePath(ParamStr(0)) + TopicEdit.Text + '.txt'); |
mache, dann steht in der erstellten datei in der zeile 1 und 2 auch das topic...
jaenicke - Mo 25.12.06 18:00
Hmm??
Mit Add fügst du in die Liste der Strings welche hinzu. Zum Beispiel eben in meinem Beispiel nacheinander den Inhalt der Edit-Felder...
Matthias-K - Mo 25.12.06 18:01
dann hast du das in der stringliste auch noch drin!
nur was in der stringliste steht, wird dann auch eingetragen. allerdings finde ich deine lösung, das in dateien zu speichern, etwas schlecht! würde nicht eine db besser sein?
damit entgehst du auch dem totalen dateien crash, wenn du irgendwann mal 1000 fragen hast.
mfg matthias
ConditionZero - Mo 25.12.06 18:02
db?
//Edit: Ah jetzt LoL... naja da hab ich noch weniger Ahnung ;-)
jaenicke - Mo 25.12.06 18:06
Das ist aber auch nicht unbedingt schwierig, es gibt da gute Freeware-Units dazu...
Bei denen musst du nicht viel über DBs wissen. Nur was eine DB eigentlich ist ;-) und ein bisschen mehr.
ConditionZero - Mo 25.12.06 18:13
ja aber ich denke fürs erste reicht die 0815-Version
Da gehts nämlich noch weiter bei meiner "Problemsammlung" ^^
Jetzt soll das Programm ja so funktionieren, dass für jedes neue Thema eine neue .txt datei angelegt werden soll, muss ich dann für jedes Thema eine neue StringListe machen, wenn ja, ein array of StringLists (wenns sowas gibt...) also ein dynamisches hm ich weiß nicht wie ich des jz alles erkläre soll...
man kann leicht nachvollziehen was ich will wenn man folgt vorgeht:
Neues Projekt in Delphi
Alt+F12 drücken.
das einfügen:
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: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110:
| object NewQuestion: TNewQuestion Left = 344 Top = 502 AutoScroll = False BorderIcons = [biSystemMenu, biMinimize] Caption = 'Neue Frage....' ClientHeight = 266 ClientWidth = 476 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 0 Top = 0 Width = 123 Height = 13 Caption = 'Titel des Thema eingeben' end object Label2: TLabel Left = 0 Top = 80 Width = 106 Height = 13 Caption = 'Neue Frage eingeben:' end object Label3: TLabel Left = 224 Top = 80 Width = 148 Height = 13 Caption = 'Antwort für die Frage eingeben:' end object TopicEdit: TEdit Left = 0 Top = 24 Width = 321 Height = 21 TabOrder = 0 Text = 'Thementitel' OnClick = TopicEditClick end object ShowTopicsBtn: TButton Left = 368 Top = 8 Width = 57 Height = 25 Caption = '---->' TabOrder = 1 OnClick = ShowTopicsBtnClick end object QuestionMemo: TMemo Left = 0 Top = 96 Width = 185 Height = 89 Lines.Strings = ( 'Frage') TabOrder = 2 end object AnswerMemo: TMemo Left = 224 Top = 96 Width = 185 Height = 89 Lines.Strings = ( 'Antwort') TabOrder = 3 end object OKBtn: TButton Left = 272 Top = 224 Width = 75 Height = 25 Caption = 'Übernehmen' TabOrder = 4 OnClick = OKBtnClick end object CancelBtn: TButton Left = 368 Top = 224 Width = 75 Height = 25 Caption = 'Abbrechen' TabOrder = 5 OnClick = CancelBtnClick end object TopicsMemo: TMemo Left = 480 Top = 16 Width = 185 Height = 233 TabOrder = 6 end object UnShowTopicBtn: TButton Left = 368 Top = 8 Width = 57 Height = 25 Caption = '<----' TabOrder = 7 Visible = False OnClick = UnShowTopicBtnClick end end |
dann den quellcode mit diesem ersetzen:
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: 82: 83: 84: 85: 86: 87: 88:
| unit Unit2;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TNewQuestion = class(TForm) TopicEdit: TEdit; Label1: TLabel; ShowTopicsBtn: TButton; Label2: TLabel; QuestionMemo: TMemo; Label3: TLabel; AnswerMemo: TMemo; OKBtn: TButton; CancelBtn: TButton; TopicsMemo: TMemo; UnShowTopicBtn: TButton; procedure ShowTopicsBtnClick(Sender: TObject); procedure UnShowTopicBtnClick(Sender: TObject); procedure CancelBtnClick(Sender: TObject); procedure OKBtnClick(Sender: TObject); procedure TopicEditClick(Sender: TObject); private public end;
var NewQuestion: TNewQuestion;
implementation
{$R *.dfm}
procedure TNewQuestion.ShowTopicsBtnClick(Sender: TObject); begin if NewQuestion.Width = 484 then begin NewQuestion.Width:= 680; ShowTopicsBtn.Caption:= '<----'; ShowTopicsBtn.Visible:= false; UnShowTopicBtn.Visible:= true; end;
end;
procedure TNewQuestion.UnShowTopicBtnClick(Sender: TObject); begin if NewQuestion.Width = 680 then begin NewQuestion.Width:= 484; ShowTopicsBtn.Caption:= '---->'; UnShowTopicBtn.Visible:= false; ShowTopicsBtn.Visible:= true;; end;
end;
procedure TNewQuestion.CancelBtnClick(Sender: TObject); begin NewQuestion.Visible:= false; end;
procedure TNewQuestion.OKBtnClick(Sender: TObject); var tmp: TStringList; begin tmp := TStringList.Create; tmp.SaveToFile(ExtractFilePath(ParamStr(0)) + TopicEdit.Text + '.txt'); tmp.Free; end;
procedure TNewQuestion.TopicEditClick(Sender: TObject); begin if TopicEdit.Text = 'Thementitel' then begin TopicEdit.Text:= Trim(''); end; end;
end. |
und dann kann man sich genau mein problem anschaun
Matthias-K - Mo 25.12.06 18:52
also,
das trim is unsinnig.
desweiteren, die stringliste wird ja ge'free't.
also wird nicht für alles einen neue stringlist angelegt, sindern nur jedesmal eine, die dann wieder gelöscht wird!
ich seh da kein problem.
wenn du magst, schreib ich dir mal ein beispielprogramm, wie ich das machen würde! ganz einfach, mit standart kompos aus delphi 5! oder 7, wie du auch magst.
pn an mich, inklusive 1-2 tage ruhepause.
mfg matthias
Blackheart666 - Mo 25.12.06 19:35
Hast Du Dir schon mal Ini Dateien angeschaut, sind sehr einfach aufgebaut und wenns nur erstmal 0815 sein soll und keine DB.
[Mathe]
Frage=
Antwort=
[Physik]
Frage=
Antwort=
hansa - Mo 25.12.06 19:42
Genau wie Blackheart es sagt siehts aus. Wäre nicht Weihnachten, dann hätte ich es schon selber geschrieben. Du suchst nach dem INI-Eintrag mit einem bestimmten Wert. Ist der falsch, dann wird der Standard-Wert zurückgeliefert und zwar in diesem Fall "falsche Antwort". :lol:
ConditionZero - Di 26.12.06 01:27
Blackheart666 hat folgendes geschrieben: |
Hast Du Dir schon mal Ini Dateien angeschaut, |
Nein, kann ich nichts mit anfangen mit Ini...
hansa - Di 26.12.06 01:32
Seit Blackhearts Antwort und meinem Kommentar sind ziemlich genau 6 St. vergangen. Das dürfte ausreichen, Delphi zu starten und <F1> zu drücken. 8)
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!