Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Teile von Textdateien in Listbox darstellen & aktualisieren (https://www.delphipraxis.net/30177-teile-von-textdateien-listbox-darstellen-aktualisieren.html)

buyden 21. Sep 2004 17:22


Teile von Textdateien in Listbox darstellen & aktualisie
 
Hi,

Ich weiß, Textdateien und Stringzerlegung war schon Thema vieler Threads aber irgendwie hat mich bis jetzt noch keiner weitergebracht also bitte nicht gleich beschimpfen :lol:

Ich möchte aus bestimmten Zeilen einer Textdatei einen Teil auslesen und ihn in einer Listbox darstellen. Die Textdatei wird aber zur Laufzeit verändert.

Beispiel:
Ein Techniker hat ein Ersatzteil verbaut und möchte das Teil im Lager ausbuchen lassen.
Dazu schreibt er an das Ende einer Textdatei einen String, bestehend aus Technikernummer; Ersatzteilnummer; leere Stelle;Wochentag; .

Der Techniker soll eine Liste haben, in der nur seine Teile aufgelistet sind.

Im lager besteht ein kleines Programm, das diese Textdatei in einer Liste darstellt. Der Lagermeister bucht das Teil aus und fügt in der Datei an die leere Stelle ein OK ein. Beim Techniker wird daraufhin der betreffende Eintrag aus der Liste gelöscht.

So sollte das ganze laufen.
Ich habe mir gedacht, ich realisiere das Ganze über einen Timer, der in gewissen Abständen die Listbox aktualisiert.
Mein Problem besteht jetzt darin: wie bekomme ich die entsprechenden Strings aus der Datei heraus und wie bemerkt das Programm, wenn das Teil ausgebucht wird.

Ich hoffe ihr versteht, wie ich mir das vorstelle :stupid:

maxk 21. Sep 2004 19:02

Re: Teile von Textdateien in Listbox darstellen & aktual
 
Ich habe dich jetzt nicht soo verstanden, daher poste ich einfach mal ein paar Ideen:
Delphi-Quellcode:
var Strs:TStrings;
begin
 Strs:=TStringList.Create;
 try
  LoadFromFile('Lager.txt');

  Listbox1.Clear;
  Listbox1.Add(Strs[1]); // Zeile 2 hinzufügen
  Listbox1.Add(Strs[0]); // Zeile 1 hinzufügen
  Listbox1.Add(Strs[5]); // Zeile 6 hinzufügen
 finally
  Strs.Free;
 end;
end;
Aber ich glaube, ich habe dich da irgendwie falsch verstanden :lol:

buyden 21. Sep 2004 20:13

Re: Teile von Textdateien in Listbox darstellen & aktual
 
Hi maxk

also ich hab mir das so gedacht: :nerd:

wenn in der Textdatei in irgendeiner Zeile die Technikernummer 100 drinsteht, dann gib mir aus dieser Zeile die Teilenummer und trage sie in meine Listbox ein.

Und zum aktualisieren:

wenn in der Zeile mit Technikernummer 100 "OK" steht, dann lösche die Nummer wieder aus der Listbox.

So sollte die Logik aussehen, es hapert aber leider an der Umsetzung;

City Light 21. Sep 2004 21:02

Re: Teile von Textdateien in Listbox darstellen & aktual
 
Hallo buyden


Was genau brauchst du jetzt für deine Anwendung?

Ein Beispiel für das suchen in einer Textdatei nach einen String?

dann kuck dir mal Klasse TStringList doch etwas genauer an (deineStringliste.IndexOf)

buyden 22. Sep 2004 15:43

Re: Teile von Textdateien in Listbox darstellen & aktual
 
Also ich als Laie würde denken das ich die Zeilen mit ner Schleife durchgehe, die Zeile auslese und mir mit POS(Technikernummer,zeile) suchen lasse, ob die gewünschte Technikernummer in der Zeile steht aber nicht "OK".
Jetzt müsste ich dem Computer irgendwie zu verstehen geben, dass er mir doch den String von dem ";" nach der T-nummer bis zum nächsten ";" geben und in die Liste eintragen soll.
Das stellt meiner Meinung nach das größte Problem für mich dar. :gruebel:

buyden 23. Sep 2004 16:49

Re: Teile von Textdateien in Listbox darstellen & aktual
 
Ach so,
ich hab noch einen kleinen Nachtrag zur Erhöhung des Schwierigkeitsgrades:

die Ersatzteilnummer kann unterschiedlich viele Stellen haben also kann ich die nicht mit copy(x,y) auslesen - denk ich :cyclops: .

Irgendwelche Ideen?? :stupid:

City Light 23. Sep 2004 17:03

Re: Teile von Textdateien in Listbox darstellen & aktual
 
Hallo

na dann schreib doch mal einen kleinen Auszug aus der textdatei, damit man das sich auch bildlich vorstellen kann...ob sie alle untereinander sind oder nicht u. so weiter. Markiere auch gleich die bereiche die du ausgelesen haben möchtest...

MFG
:hi:

buyden 23. Sep 2004 19:35

Re: Teile von Textdateien in Listbox darstellen & aktual
 
So ist die Datei aufgebaut:


143,SR604397,OK, 1
111,SR604572,OK, 1
109,SR604580,OK, 1
123,IMPU002188,OK, 1
108,SR604563,OK, 1
113,SR604397,OK, 1
100,IM002188,, 1
143,SR604563,, 1

Der Techniker 143 hat die Teile SR604397 und SR604563 verbaut. Ersteres wurde vom Lager schon ausgebucht, erkennbar an dem "OK".
In der Listbox soll jetzt also nur die SR604563 auftauchen. Sobald diese ausgebucht wird - also "OK" in der Zeile steht soll die Nummer aus der Liste gelöscht werden.

City Light 23. Sep 2004 21:47

Re: Teile von Textdateien in Listbox darstellen & aktual
 
Also ich bin erstmal bis hier... :wall: nur bringt dich das ja auch leider noch nicht weiter. Weil diese Routine nur die nummer des Technicker aus liest.Auch die wo OK mit bei ist...ich wert aber dran bleiben bis ich was neues hab. Vielleicht gibt es ja einen hier im Forum der das schon mal gemacht hat?

Delphi-Quellcode:
var
  a: integer;
  sl,gefunden: TStringlist;
begin
  sl := TStringlist.Create;
  sl.LoadFromFile('C:\Test.Txt');
  gefunden := TStringlist.Create;
  try
  for a := 0 to sl.count - 1 do
    begin
      if pos('143', sl.Strings[a]) <> 0 then  //Der Techniker 143
      gefunden.Add(sl.Strings[a]);
       Form1.Listbox1.Items.Text := gefunden.Text;
     end;
  finally
    sl.Free;
    gefunden.free;
 end;
MFG
:hi:

maxk 24. Sep 2004 14:18

Re: Teile von Textdateien in Listbox darstellen & aktual
 
Vielleicht so?
Delphi-Quellcode:
var Line,Artikel:string;
    i:integer;
begin
with TStringList.Create do try
  LoadFromFile('C:\Lager.txt');
  Listbox1.Clear;
  for i:=0 to Count-1 do begin
   Line:=Strings[i];                  // 143,SR604563,, 1
   System.Delete(Line,1,pos(',',Line));// SR604563,, 1
   Artikel:=copy(Line,1,pos(',',Line)-1);
   System.Delete(Line,1,pos(',',Line));// , 1
   if not AnsiSameText(copy(Line,1,2),'OK') then ListBox1.Items.Add(Artikel);
  end;
finally
  Free;
end;
end;

buyden 25. Sep 2004 07:06

Re: Teile von Textdateien in Listbox darstellen & aktual
 
hi maxk

Ich glaube die Idee mit dem Löschen ist sehr gut. :mrgreen:
Ich lese erst die Technikernummer aus, überprüfe dann ob "ok" in der Zeile steht und lösche dann die technikernummer und das erste Komma. Dann kann ich theoretisch ja den String bis zum neuen ersten Komma auslesen - die Teilenummer quasi.

Das könnte funktionieren. Ich werd das mal testen und meld mich nochmal.

Danke erstmal. :thumb:

buyden 27. Sep 2004 16:30

Re: Teile von Textdateien in Listbox darstellen & aktual
 
Also ich hab das mal versucht, aber bei folgendem Code bekomme ich immer ne Access Violation, aber ich kann mir nicht so ganz erklären warum:

Delphi-Quellcode:
procedure TForm1.Timer2Timer(Sender: TObject);
var list: tstringlist;
    zeile, nummer: string;
    i:integer;
begin
listbox1.Items.Clear;
list.Create;
list.LoadFromFile(datamodule1.tbsetting.fieldbyname('pfad').asstring);
for i:=0 to list.Count do
  begin
  zeile:=list[i];
  if pos(datamodule1.tbsetting.fieldbyname('techniker').asstring,zeile)<>0 then
     begin
     if pos('OK',zeile)=0 then
        Begin
        system.Delete(zeile,1,pos(',',zeile));
        nummer:=copy(zeile,1,pos(',',zeile)-1);
        listbox1.Items.Add(nummer);
        end;
     end;
  end;
if listbox1.Items.Count=0 then
   timer2.Enabled:=false;
list.Free;
end;
Sieht jemand den Fehler?? :coder2:

Ich hab das Programm zeilenweise aufen lassen und irgendwie muss der Fehler beim LoadFromFile liegen. Die Datei ist aber nicht geöffnet oder sonstwie gesperrt. ICh kann mir das nicht so ganz erklären. :gruebel:

maxk 28. Sep 2004 16:22

Re: Teile von Textdateien in Listbox darstellen & aktual
 
Statt list.Create; schreib mal list:=TStringList.Create;

buyden 28. Sep 2004 17:14

Re: Teile von Textdateien in Listbox darstellen & aktual
 
:lol: Das war's!! :lol:

Funzt alles wie's soll.

Vielen Dank für die Hilfe..

Ein virtuelles Bier für dich!!! :cheers:


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