Autor Beitrag
Templar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Do 31.10.02 09:48 
Guten Morgen erstmal

Ich stehe mal wieder vor einem riesen problem :?: :!:
Es geht darum, das ich gerne überprüfen möchte ob genau diese Zeile in meiner Listbox leer ist und das ich dann eine meldung bekomme, quasi
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var
Zeile : string;

procedure button1.click(....)
begin
   Listbox1.Items.Count;
   if Listbox.Items[2] ='(leer)' and (sowas wie EOF) then 
     begin
        Showmessage ('Diese Listbox ist zuende');
     end
else
....
Listbox1.Items[2]
for I:=0 to length (zeile) do
...
end;
end.


Ich hoffe Ihr könnt mir helfen.

MFG Templar

_________________
a metal heart is hard to tear apart
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 31.10.02 10:20 
ausblenden Quelltext
1:
2:
3:
for i := 0 to Listbox1.Items.Count - 1 do
  if(ListBox1.Items[i] = '') then
    ShowMessage('Hier steht ja gar nichts');

Mal ehrlich, das hättest du auch allein -mit der Hilfe- herausfinden können. Allerdings ist nicht gesagt, dass mit einem leeren Item nun auch das Ende der Listbox gefunden wurde. Insofern ist die von dir gewünschte Meldung
Zitat:
Diese Listbox ist zuende

eigentlich falsch.
Templar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Do 31.10.02 11:29 
Das ist ja auch alles schön und gut.
Leider hatte ich nicht erwähnt, das gewisse Daten aus den einzelnen Zeilen in eine andere Listbox geschrieben werden und danach die komplette Zeile aus der ersten gelöscht. so das es am ende so aussieht

    [Laufwerksbuchstabe]:\[Pfad]\[Dateiname]
    "Nr""Name""Vorname""Gang""EMail""Telefon""angemeldet""Gruppe"


Am besten ich zeig auch mal den Code
ausblenden volle Höhe 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:
procedure TAnmeldung.VergleichenClick(Sender: TObject);
var
nr : string;
Zeile : string;
posi,i : integer;
begin
Label3.Caption := 'Die Listbox hat' + Inttostr(Listbox1.Items.Count) + 'Zeilen';
Zeile := Listbox1.Items[2];
     posi := 2;

if (Zeile[posi]<>'"') then
   begin
        repeat
              nr := nr + Zeile[posi];
              posi := posi+1;
        until
             (Zeile[posi] = '"');
   end;
   nr_e.Text := nr;

     if vorhanden(Listbox2,nr_e.text) then
     begin
     Showmessage('Diese nummer ist schon vorhanden');
     Einlesen.enabled := false;
     Listbox1.Items.Delete(2)
     end
     else
     begin
     Listbox2.Items.Add (nr_e.text);
     Listbox2.Items.Savetofile('[Laufwerksbuchstabe]:\[Pfad]\[Verzeichnis]\*.txt');
     Einlesen.enabled := true;
     end;
end;


Ich hoffe mein problem wird dadurch etwas verständlicher

MFG Templar

_________________
a metal heart is hard to tear apart
Raphael82
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: Do 31.10.02 12:57 
Na, dann lass uns dass dochmal durchgehen, hast dich da glaube ich ziemlich verrannt..

ausblenden Quelltext
1:
Label3.Caption := 'Die Listbox hat' + Inttostr(Listbox1.Items.Count) + 'Zeilen';					

Richtig :)

ausblenden Quelltext
1:
Zeile := Listbox1.Items[2];					

Hier lädst du den 3. Eintrag der Liste (ListBox1) in die Variable Zeile

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
     posi := 2; 

if (Zeile[posi]<>'"') then 
   begin 
        repeat 
              nr := nr + Zeile[posi]; 
              posi := posi+1; 
        until 
             (Zeile[posi] = '"'); 
   end;

Die Integervariable posi setzt du auf zwei, du willst also alle Zeichen in "nr" schreiben bis zum ersten mal das Zeichen " auftaucht. Das erste Zeichen lässt du dabei weg. Der Code sieht aus als würde er funktionieren, doch schön ist er nicht. Ungetestet würde ich ihn hierdurch ersetzen:
ausblenden Quelltext
1:
2:
3:
4:
5:
while Zeile[posi]<>'"' do 
 begin
  nr := nr+Zeile[posi];
  inc(posi);
 end;


ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
   nr_e.Text := nr; 

     if vorhanden(Listbox2,nr_e.text) then 
     begin 
     Showmessage('Diese nummer ist schon vorhanden'); 
     Einlesen.enabled := false; 
     Listbox1.Items.Delete(2); 
     end
     else 
     begin 
     Listbox2.Items.Add (nr_e.text); 
     Listbox2.Items.Savetofile('[Laufwerksbuchstabe]:\[Pfad]\[Verzeichnis]\*.txt'); 
     Einlesen.enabled := true; 
     end; 
end;

Ich nehme jetzt mal an, dass "nr_e" ein EditFeld ist. (Oder ein Record?)
Doch was soll vorhanden() für eine Prozedur sein? Ich nehme an, du hast eine Funktion geschrieben, welche überprüft ob es den Eintrag in Listbox2 schon gibt? In dem Fall wäre das ja nur eine Zahl also sollte deine Funktion vorhanden(); so aussehen: (Den Komponentennamen brauchst du nicht zu übergeben, der ändert sich ja nicht!)

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
function vorhanden(s:string):Boolean;
var i : integer;
begin
Result:=false;
 for i:= 0 to ListBox2.Items.Count-1 do
  if ListBox2.Items[i] = s then Result:=true;
end;

Wie du siehst bräuchtest du eigentlich keine extra Funktion dafür, doch ich hab mal deinen Ansatz übernommen.

Und jetzt machst du etwas, was ich gar nicht verstehe:

ausblenden Quelltext
1:
2:
     Listbox2.Items.Add (nr_e.text); 
     Listbox2.Items.Savetofile('[Laufwerksbuchstabe]:\[Pfad]\[Verzeichnis]\*.txt');


Als erstes fügst du ListBox2 eine Zahl hinzu, welche du aus Listbox1 extrahiert hast! Denn in nr_e.Text ist nur eine Zahl als String gespeichert.
Dann willst du ListBox2 in eine Datei speichern, gibst jedoch keine datei an. Wenn du die Datei im Verzeichnis der .exe haben willst mach es so:

ausblenden Quelltext
1:
 ListBox2.Items.SaveToFile(ExtractFilePath(Application.ExeName)+'test.txt');					


Doch den Sinn des ganzen verstehe ich nicht. Du hast eine Listbox in der Nummern, Namen etc gespeichert sind, von dort holst du dir aus genau einem Eintrag diese Nummer. Dann prüfst du ob es die Nummer in der 2. Listbox auch gibt und wenn es sie nicht gibt speicherst du die gesamte ListBox2 in einer datei. wenn sie in ListBox2 schon vorhanden ist löscht du den Eintrag. Wenn du das in einer Schleife machen würdest so würdest du alle Einträge aus ListBox 1 (ab Position 3) nacheinander überprüfen und ggf. eine Nummer an Listbox2 übergeben und diese Speichern, die dazugehörigen Daten, Name etc sind jedoch verloren weil du sie ja dann löscht. Was dir bleibt ist eine Textdatei voll mit nichtssagenden Nummern!
Deinen Quelltext habe ich kurz verbessert doch es fehlt ihm den Sinn. Wenn du eine Art Adressenverzeichnis machen willst, sind Textdateien eh ungeeignet. Du solltest typisierte-Dateien verwenden oder eben mit Datenbanken arbeiten.

Tutorials zu typisierten Dateien, mit eben dem Beispiel einer Adressenverwaltung findest du unter www.delphi-source.de

Man sieht, dass du dir Mühe gegeben hast doch hast du leider ein paar gravierende Denkfehler im Quelltext und es scheint, als sei der Ansatz falsch!

MfG, Raphael

Nicht aufgeben!!

_________________
Share your knowledge to receive perfection!
Templar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Do 31.10.02 14:34 
Titel: Ich habe fertig
So musste der Code aussehen.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
begin
     Label3.visible := true;
     Label3.caption := 'Die Listbox hat '+ inttostr(Listbox1.Items.count) +' Zeilen';
 for I:= Listbox1.Items.Count to 1 do
     begin
          if (Listbox1.Items.count > 1) then
             begin
                  loeschen.enabled := true;
                  Einlesen.enabled := true;
             end
          else
              begin
                   ShowMessage ('Es sind keine weiteren Einträge zum übernehmen vorhanden.Die Listbox wird jetzt geleert!');
                   Listbox1.clear;
                   vergleichen.enabled := false;
                   loeschen.enabled := false;
                   Label3.caption := 'Die Listbox hat '+ inttostr(Listbox1.Items.count) +' Zeilen';
                   exit;
              end;
     end;


Somit ist mein Problem gelöst.
Als denn möcht ich mich für die unterstützung bedanken

MFG Templar

_________________
a metal heart is hard to tear apart
Raphael82
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: Do 31.10.02 15:59 
Nicht perfekt :D doch schön wenn man helfen konnte!!

Raphael

_________________
Share your knowledge to receive perfection!