| Autor |
Beitrag |
F.Art
      
Beiträge: 434
|
Verfasst: Do 09.01.03 01:21
Wie macht man das eine Textdatei geladen wird und dann sortiert in drei Listboxen aufgeteilt wird.
Die Textdatei soll wie folgt aussehen.
Namen:
Mike
Dirk
Udo
Nachnahmen:
Müller
Schuster
Schmidt
Email Adresse:
1@xy.net
2@xy.net
3@xy.net
Und beim Laden sollen die jeweils richtig ein geordnet werden.
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Do 09.01.03 08:14
Hallo
du kannst entweder die Datei mit reset öffnen oder du nimmst eine extra Stringliste und lädst die Datei mit loadfromfile ein. anschließend gehst du die items einzeln durch und fügst sie zu jeweiligen listbox zu.
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| sl:=Tstringlist.create; sl.loadfromfile('blablabla') for i:=0 to sl.count-1 do begin if sl.items[i]='Namen:' then Mode:=0 else if sl.items[i]='Nachnahmen:' then Mode:=1 else if sl.items[i]='EMail Adresse:' then Mode:=2 else begin case mode of 0: Listbox1.items.add(sl.items[i]); 1: Listbox2.items.add(sl.items[i]); 2: Listbox3.items.add(sl.items[i]); end; end; sl.free; |
ungetestet aus dem Kalten, vielleicht noch n try-finally einbauen
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Do 09.01.03 13:42
Es läuft so nicht ganz und bekomme es nich alleine gängig.
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Do 09.01.03 13:53
Hallo,
kannst Du mal so eine Text-Datei genauer beschreiben. Was spricht dagegen, die Infos in der Form
Name;Vorname;Mail
Mike;Müller;1@xy.net
zu speichern?
Warum 3 Listboxen? Geht das nicht in einer Listview?
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Do 09.01.03 15:06
1. Die Liste sollte sortiert sein damit andere ganz einfach sie erweitern können.
2. Es sind schleifen drin die auf einzelne listboxen zugreifen und ich kann das nich in eine setzen.
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Do 09.01.03 15:41
| F.Art hat folgendes geschrieben: | | Es läuft so nicht ganz und bekomme es nich alleine gängig. |
was läuft nicht?
| F.Art hat folgendes geschrieben: |
1. Die Liste sollte sortiert sein damit andere ganz einfach sie erweitern können.
|
hängen die daten nicht zusammen? , wenn du 3LB´s hast, verlierst du die Zuordnung
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 09.01.03 16:52
| Keldorn hat folgendes geschrieben: |
hängen die daten nicht zusammen? , wenn du 3LB´s hast, verlierst du die Zuordnung
|
Nicht mit viel Aufwand und krampfhaften Code. Man kann sich viel Arbeit ersparen, wenn man für den richtigen Zweck, das richtige Steuerelement nimmt.
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Do 09.01.03 17:52
Ich möchte die aufstellung der textdatei so haben damit andere ganz bequem was per texteditor hinzufügen können.ich möchte mir nicht die arbeit machen das ins prog einzubinden das man von dort aus speichern kann.ausserdem möchte ich auch selbst wissen wie man das mit meiner idee hin bekommt.
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Do 09.01.03 18:13
| smiegel hat folgendes geschrieben: | Hallo,
Was spricht dagegen, die Infos in der Form
Name;Vorname;Mail
Mike;Müller;1@xy.net
|
| Zitat: |
Ich möchte die aufstellung der textdatei so haben damit andere ganz bequem was per texteditor hinzufügen können
|
daten in so einem Format kannst du äußerst bequem im Excel in übersichtlicher Tabllenform erstellen und(anschließend z.B. als Text-datei Tabsgetrennt) speichern
Was das Trennzeichen Tab oder Semikolon ist, ist dabei egal, kannst deinen Code flexeibel gestalten. Du ließt einen String ein, suchst ein trennezeichen (Pos) und kopierst die TeilStrings (copy) und füllst die Listboxen oder halt gleich ein Listview.
was läuft denn nu nicht?
Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Do 09.01.03 19:17
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) ListBox1: TListBox; ListBox2: TListBox; ListBox3: TListBox; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var i : word; sl : Tstringlist; begin sl:=Tstringlist.create; sl.loadfromfile('test.txt'); for i:=0 to sl.count-1 do begin if sl.items[i]='Namen:' then Mode:=0 else if sl.items[i]='Nachnahmen:' then Mode:=1 else if sl.items[i]='EMail Adresse:' then Mode:=2 else begin case mode of 0: Listbox1.items.add(sl.items[i]); 1: Listbox2.items.add(sl.items[i]); 2: Listbox3.items.add(sl.items[i]); end; end; sl.free;
end;
end. |
Der Fehler kommt
| Zitat: | Undeclared identifier: 'items'
Undeclared identifier: 'Mode' |
(10.01. 09:11 Tino) Code- & Quote-Tags hinzugefügt.
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Fr 10.01.03 08:33
Hallo,
mode mußt du noch als word, integer deklarieren
das kommt davon, wenn man was direkt ins Forum schreibt
sl.strings[]
mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Fr 10.01.03 09:30
Hallo,
folgend ein Beispiel, wie es gehen könnte, wenn Du das von mir vorgeschlagene Verfahren benutzt:
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:
| type TAdressen:array[0..2] of String;
function Zerlege(aStr:String; aTrenner:Char):TAdressen; var i:Integer; begin i:=System.Pos(aTrenner, aStr); if (i>0) then begin Result[0]:=System.Copy(aStr, 1, i-1); Delete(s, 1, i); end; i:=System.Pos(aTrenner, aStr); if (i>0) then begin Result[1]:=System.Copy(aStr, 1, i-1); Delete(s, 1, i); end; Result[2]:=aStr; end; // Zerlege
procedure TForm1.Button1Click(Sender: TObject); var i :Integer; sl :TStringList; adr:TAdressen; begin sl:=TStringList.Create; try sl.loadfromfile('test.txt'); for i:=0 to sl.count-1 do begin adr:=Zerlege(sl.Strings[i], ';'); Listbox1.items.add(adr[0]); Listbox2.items.add(adr[1]); Listbox3.items.add(adr[2]); end; // for i finally sl.Free; end; // try end; |
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Fr 10.01.03 13:16
@ Smiegel
bei dir kommt da ein Fehler TAdressen:array[0..2] of String;
Und bei dem anderen Source kommt Undeclared identifier: 'items'
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Fr 10.01.03 14:14
nobody is perfect.
aber ein wenig mitdenken ist nicht zu viel verlangt?. Du kannst nicht verlangen, daß du hier im Forum eine 100% zu dir passende und funktionierende Lösung bekommst. Alle Problem ließen sich mit einem Blick auf die Fehlermeldung/Onlinehilfe lösen.
items:
ein Blick in die OH würde dir reichen, um zu erkennen, daß ich mich von Listbox hab leiten lassen und die strings nicht mit items wie in der Listbox sondern sl.strings[index] angesprochen werden. War halt direkt ins Forum geklimpert - mein Fehler
array Fehler:
der Compiler wird meckern und dir sagen
| Zitat: |
[Fehler] Unit2.pas(20): '=' erwartet, aber ':' gefunden
|
also statt : ein = mal probieren ?
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Fr 10.01.03 16:37
Hallo,
@Kehldorn: Danke für die Korrektur meines Tippfehlers.
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Sa 11.01.03 13:22
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
ListBox2: TListBox;
ListBox3: TListBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i : word;
Mode : word;
sl : Tstringlist;
begin
sl:=Tstringlist.create;
sl.loadfromfile('test.txt');
for i:=0 to sl.count-1 do
begin
if sl.strings[i]='Namen:' then Mode:=0
else if sl.strings[i]='Nachnahmen:' then Mode:=1
else if sl.strings[i]='EMail Adresse:' then Mode:=2
else
begin
case mode of
0: Listbox1.items.add(sl.strings[i]);
1: Listbox2.items.add(sl.strings[i]);
2: Listbox3.items.add(sl.strings[i]);
end;
end;
sl.free;
end;
end;
end.
Wenn ich dann die EXE starte und den Button klicke kommt
Acces violation at adress 00000000. Read of adress 0000000.
und die erste listbox wird nur Name: eingetragen.
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Sa 11.01.03 13:53
Hallo F.Art!
Kann es sein das bei dir die Datei "test.txt" nicht existiert?
Gruß Hape!
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Sa 11.01.03 14:11
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Sa 11.01.03 15:02
Hallo,
es kann schon sein, dass die Datei da ist. Aber weiss Dein Programm, wo sich die Datei befindet?
Mit
Quelltext 1: 2: 3: 4: 5: 6:
| if FileExists('test.txt') then begin sl.loadfromfile('test.txt'); ... ... end else ShowMessage('Datei nicht gefunden'); |
kannst Du feststellen, ob die Datei auch wirklich geladen wird.
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Sa 11.01.03 15:39
Hallo F.Art!
Mir fällt gerade kein fehler mehr auf! Sinnvoll wäre es jedoch am Anfang Mode auf -1 zu setzen, damit leere Zeilen am Anfang ignoriert werden!
Zum Fehler: Am besten du setzt mal eine Haltepunkt an den Anfang dieser Prozedur und führst danach die einzelnen Befehle mit F8 einzeln aus!
Gruß Hape!
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|