Autor Beitrag
wurzel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75

Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
BeitragVerfasst: Mi 14.03.07 11:36 
Hallo.

Hab en Problem, was ich nicht hier in der Suche gefunden habe. Ich habe 2 *.txt-files. In der ersten steht sowas wie
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
10 03 05 20-2  KB-S 333
10 03 05 20-3  KB-S 333
10 03 05 20-4  KB-S 333
10 03 05 20-5  KB-S 333
10 03 05 20-6  KB-S 333
10 03 05 20-7  KB-S 333
10 03 05 20-8  KB-S 333


in der zweiten
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
09 06 05 10-1  39
09 06 05 10-8  39
09 06 04 30-1  39
09 06 04 30-2  39
09 06 04 30-5  39
11 07 03 10-5  39


Im ersten File sind die einzelen Zeilen nicht durch ein Tab getrennt.
Im zweiten File ist der erste Block "xx xx xx xx-x" durch ein Tab getrennt vom zweiten Block "xx".

Ich will nun, dass mein Tool sich die ersten Zeichen krallt vom ersten File und das mit dem zweiten File vergleicht. Wenn es einen Treffer landet, dann soll überprüft werden, ob der zweite Block im zweiten File größer als 0 ist.

THX schonmal für eure Hilfe

_________________
"Könntest du deinen Egotrip mal kurz unterbrechen? Es ist was wichtiges passiert." - "Wenn es irgendwas wichtigeres als mein Ego gibt, verlange ich, dass man es auf der Stelle verhaftet und erschießt."
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Mi 14.03.07 12:44 
user profile iconwurzel hat folgendes geschrieben:
Ich will nun, dass mein Tool sich die ersten Zeichen krallt vom ersten File und das mit dem zweiten File vergleicht.

Das solltest du wohl etwas näher beschreiben. Vielleicht auch mal ein Beispiel zeigen.

_________________
Ein Nutzer der Ecke ;-)
wurzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75

Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
BeitragVerfasst: Do 15.03.07 08:03 
Als Anhang ein Struktogramm
Einloggen, um Attachments anzusehen!
_________________
"Könntest du deinen Egotrip mal kurz unterbrechen? Es ist was wichtiges passiert." - "Wenn es irgendwas wichtigeres als mein Ego gibt, verlange ich, dass man es auf der Stelle verhaftet und erschießt."
wurzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75

Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
BeitragVerfasst: Do 15.03.07 09:24 
Hier noch mein bisheriger Quellcode

ausblenden volle Höhe 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:
var
  Form1: TForm1;
  liste_1 : TStringlist;
  liste_2 : TStringlist;
  count_l1 : Integer;
  count_l2 : Integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Liste_1 := TStringlist.Create;
  Listbox1.Items.LoadFromFile('liste_1.txt');
  Listbox2.Items.LoadFromFile('liste_2.txt');
  count_l1 := Listbox1.Items.Count;
  count_l2 := Listbox2.Items.Count;
  Label7.Caption := 'Einträge: ' + IntToStr(count_l1);
  Label8.Caption := 'Einträge: ' + IntToStr(count_l2);
end;

procedure TForm1.Button2Click(Sender: TObject);
var i,count : Integer;
count_i : Integer;
count_k : Integer;

begin
  count_i := 0;
  count_k := 0;
  
  repeat
    if Listbox1.Items.ValueFromIndex[count_i] = Listbox2.Items.ValueFromIndex[count_k] then
      begin
//        Listbox3.Assign(Listbox1);
        count_k := count_k + 1;
      end;
    count_i := count_i + 1;

  until (count_k = count_l2);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Caption := 'CMS 6000 - Fehlende Abrechnungen';
  Label1.Caption := 'Fehlende Abrechnungen???';
  Label2.Caption := 'Liste Kiwi';
  Label3.Caption := 'Liste CMS';
  Label4.Caption := 'Fehlende Abrechnungen';
  Label5.Caption := 'Abrechungen zuviel';
  Label6.Caption := Chr(169) + ' by wurzel';
  Label7.Caption := 'Einträge:';
  Label8.Caption := 'Einträge:';
  Button1.Caption := 'Laden';
  Button2.Caption := 'Suchen';
end;

end.

_________________
"Könntest du deinen Egotrip mal kurz unterbrechen? Es ist was wichtiges passiert." - "Wenn es irgendwas wichtigeres als mein Ego gibt, verlange ich, dass man es auf der Stelle verhaftet und erschießt."
wurzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75

Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
BeitragVerfasst: Do 15.03.07 10:36 
Bitte helft mir :(

_________________
"Könntest du deinen Egotrip mal kurz unterbrechen? Es ist was wichtiges passiert." - "Wenn es irgendwas wichtigeres als mein Ego gibt, verlange ich, dass man es auf der Stelle verhaftet und erschießt."
wurzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75

Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
BeitragVerfasst: Do 15.03.07 10:48 
Neue Procedure, aber der Suchfilter ist zu stark. Wie kann ich das machen, dass er nur die ersten 8 Zeichen suchen soll?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.Button2Click(Sender: TObject);
var i,count : Integer;
count_i : Integer;
count_k : Integer;

begin
  count_i := 0;
  count_k := 0;
  
  repeat
    if Pos(Listbox1.Items[count_i],ListBox2.Items.Text) = 0 then
      begin
        Listbox3.Items.Add(Listbox1.Items.ValueFromIndex[count_i]);
//        Listbox3.Assign(Listbox1);
        count_k := count_k + 1;
      end;
    count_i := count_i + 1;

  until (count_k = count_l2);
end;

_________________
"Könntest du deinen Egotrip mal kurz unterbrechen? Es ist was wichtiges passiert." - "Wenn es irgendwas wichtigeres als mein Ego gibt, verlange ich, dass man es auf der Stelle verhaftet und erschießt."
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Do 15.03.07 11:56 
user profile iconwurzel hat folgendes geschrieben:
Neue Procedure, aber der Suchfilter ist zu stark. Wie kann ich das machen, dass er nur die ersten 8 Zeichen suchen soll?


LeftStr()
wurzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75

Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
BeitragVerfasst: Do 15.03.07 12:15 
Procedure geupdatet

ausblenden volle Höhe 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:
procedure TForm1.Button2Click(Sender: TObject);
var i,count : Integer;
count_i : Integer;
count_k : Integer;
count_f : Integer;
acht : String;

begin
  count_i := 0;
  count_k := 0;
  count_f := 0;
  repeat
//    acht := LeftStr(Listbox1.Items.ValueFromIndex[count_i],13);
    if Pos(LeftStr(Listbox1.Items.ValueFromIndex[count_i],13),ListBox2.Items.Text) = 0 then
      begin
        Listbox3.Items.Add(Listbox1.Items.ValueFromIndex[count_i]);
        count_k := count_k + 1;
      end
    else
      if Pos(Listbox1.Items[count_i],'*frei*') = 0 then
        begin
          count_f := count_f + 1;
          Label11.Caption := 'Freie Einträge: ' + IntToStr(count_f);
        end
      else      
      Listbox4.Items.Add(Listbox1.Items.ValueFromIndex[count_i]);
    count_i := count_i + 1;
  until (count_i = count_l1);
  count_l3 := Listbox3.Items.Count;
  count_l4 := Listbox4.Items.Count;
  Label9.Caption := 'Einträge: ' + IntToStr(count_l3);
  Label10.Caption := 'Einträge: ' + IntToStr(count_l4);
end;

_________________
"Könntest du deinen Egotrip mal kurz unterbrechen? Es ist was wichtiges passiert." - "Wenn es irgendwas wichtigeres als mein Ego gibt, verlange ich, dass man es auf der Stelle verhaftet und erschießt."
wurzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75

Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
BeitragVerfasst: Do 15.03.07 14:08 
Cool, thx, das klappt schonmal. Nun bekomme ich aber in einer meiner Listboxen nicht "frei", sondern "rei" angezeigt. Ist ärgerlich, weil ich nach dem Begriff "frei" suche und dann löschen will. Woran liegts?

_________________
"Könntest du deinen Egotrip mal kurz unterbrechen? Es ist was wichtiges passiert." - "Wenn es irgendwas wichtigeres als mein Ego gibt, verlange ich, dass man es auf der Stelle verhaftet und erschießt."
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Do 15.03.07 14:48 
Wer soll das verstehen/wissen?

Es taucht in deinem Codeschnipsel nirgendwo "frei" auf, sondern höchstens "*frei*".
Auch ist die Verwendung von ValueFromIndex zweifelhaft. Welchen Separator zwischen Name und Wert benutzt du überhaupt?

Zudem kann es ja nicht so schwer sein, zu sagen in welcher Listbox irgendwas unerwartetes geschieht.
wurzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75

Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
BeitragVerfasst: Do 15.03.07 15:03 
Ist garnicht schwer zu verstehen.

ausblenden volle Höhe 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:
var
  Form1: TForm1;
  liste_1 : TStringlist;
  liste_2 : TStringlist;
  count_l1 : Integer;
  count_l2 : Integer;
  count_l3 : Integer;
  count_l4 : Integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Liste_1 := TStringlist.Create;
  Listbox1.Items.LoadFromFile('liste_1.txt');
  Listbox2.Items.LoadFromFile('liste_2.txt');
  count_l1 := Listbox1.Items.Count;
  count_l2 := Listbox2.Items.Count;
  Label7.Caption := 'Einträge: ' + IntToStr(count_l1);
  Label8.Caption := 'Einträge: ' + IntToStr(count_l2);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
count_i : Integer;

begin
  count_i := 0;
  repeat
      if Pos(LeftStr(Listbox1.Items.ValueFromIndex[count_i],12),ListBox2.Items.Text) = 0 then
        begin
          Listbox3.Items.Add(Listbox1.Items.ValueFromIndex[count_i]);
        end
      else
        begin
          Listbox4.Items.Add(Listbox1.Items.ValueFromIndex[count_i]);
        end;
    ListBox4.Items.Delete(ListBox4.Items.IndexOf('rei'));    // rei weil der erste Buchstabe verschluckt wird, ist eig. frei
    count_i := count_i + 1;
  until (count_i = count_l1);
  count_l3 := Listbox3.Items.Count;
  count_l4 := Listbox4.Items.Count;
  Label9.Caption := 'Einträge: ' + IntToStr(count_l3);
  Label10.Caption := 'Einträge: ' + IntToStr(count_l4);
end;



procedure TForm1.FormCreate(Sender: TObject);
begin
  Caption := 'CMS 6000 - Fehlende Abrechnungen';
  Label1.Caption := 'Fehlende Abrechnungen???';
  Label2.Caption := 'Liste Kiwi';
  Label3.Caption := 'Liste CMS';
  Label4.Caption := 'Fehlende Abrechnungen';
  Label5.Caption := 'Abrechungen zuviel';
  Label6.Caption := Chr(169) + ' by wurzel';
  Label7.Caption := 'Einträge:';
  Label8.Caption := 'Einträge:';
  Label9.Caption := 'Einträge:';
  Label10.Caption := 'Einträge:';
  Label11.Caption := 'Freie Einträge: ';
  Button1.Caption := 'Laden';
  Button2.Caption := 'Suchen';
  Button3.Caption := 'Abbrechen';
end;

end.

_________________
"Könntest du deinen Egotrip mal kurz unterbrechen? Es ist was wichtiges passiert." - "Wenn es irgendwas wichtigeres als mein Ego gibt, verlange ich, dass man es auf der Stelle verhaftet und erschießt."
wurzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75

Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
BeitragVerfasst: Do 15.03.07 15:19 
So, jetzt die Vergleich-Prozedur Schritt für Schritt:

ausblenden Delphi-Quelltext
1:
2:
repeat
  if Pos(LeftStr(Listbox1.Items.ValueFromIndex[count_i],12),ListBox2.Items.Text = 0 then

===> Von dem Wert i in der 1. Listbox werden die ersten 12 Zeichen genommen, und mit der 2. kompletten Listbox verglichen

ausblenden Delphi-Quelltext
1:
2:
3:
        begin
          Listbox3.Items.Add(Listbox1.Items.ValueFromIndex[count_i]);
        end

===> Falls keine Übereinstimmung da ist ( = 0 ), dann wird der Wert i aus der 1. Listbox in Listbox 3 geschrieben

ausblenden Delphi-Quelltext
1:
2:
3:
4:
      else
        begin
          Listbox4.Items.Add(Listbox1.Items.ValueFromIndex[count_i]);
        end;

===> Ansonsten wird der Wert i aus der 1. Listbox in die 4. Listbox geschrieben.

ausblenden Delphi-Quelltext
1:
   ListBox4.Items.Delete(ListBox4.Items.IndexOf('rei'));    // rei weil der erste Buchstabe verschluckt wird, ist eig. frei					

===> Hier wird in der 4. Listbox alles gelöscht, wo "rei" drinne steht, was eigentlich frei sein soll

ausblenden Delphi-Quelltext
1:
2:
    count_i := count_i + 1;
  until (count_i = count_l1);

===> Hier wird der count_i bei jedem Aufruf um 1 erhöht. Die ganze Schleife geht solange, bis count_i so groß ist wie die erste Listbox lang ist.

_________________
"Könntest du deinen Egotrip mal kurz unterbrechen? Es ist was wichtiges passiert." - "Wenn es irgendwas wichtigeres als mein Ego gibt, verlange ich, dass man es auf der Stelle verhaftet und erschießt."
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Do 15.03.07 15:36 
Deinen Code würde jeder verstehen, wenn der, der hier im Thread steht auch der wäre, worauf deine Postings sich beziehen. Das war zum Zeitpunkt meines Vorpostings definitv nicht der Fall.

Apropos Vorposting: Was ist mit meiner Frage zu ValueFromIndex?
Willst du sie noch beantworten oder besser (meine Empfehlung!) gleich auf ValueFromIndex verzichten?
Ich denke, du weißt nicht so wirklich, was du damit machst. Die Nutzung dieser Eigenschaft von TStrings.Items (anstatt TStrings.Items direkt zu benutzen) raubt dir auch deine Zeichen.
wurzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75

Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
BeitragVerfasst: Do 15.03.07 15:43 
Ich hab ValueFromIndex benutzt, weil es mir am logischsten schien und es auch eig ganz gut funzt. Aber erklär mir mal was du meisnt mit TStrings.Item. Mach mir bitte mal en Vorschlag :(

_________________
"Könntest du deinen Egotrip mal kurz unterbrechen? Es ist was wichtiges passiert." - "Wenn es irgendwas wichtigeres als mein Ego gibt, verlange ich, dass man es auf der Stelle verhaftet und erschießt."
wurzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75

Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
BeitragVerfasst: Do 15.03.07 15:49 
Habs jetzt mit TStringlist

ausblenden volle Höhe 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:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Liste_1 := TStringlist.Create;
  Liste_2 := TStringlist.Create;
  Liste_1.LoadFromFile('liste_1.txt');
  Liste_2.LoadFromFile('liste_2.txt');
  Listbox1.Items.LoadFromFile('liste_1.txt');
  Listbox2.Items.LoadFromFile('liste_2.txt');
  count_l1 := Listbox1.Items.Count;
  count_l2 := Listbox2.Items.Count;
  Label7.Caption := 'Einträge: ' + IntToStr(count_l1);
  Label8.Caption := 'Einträge: ' + IntToStr(count_l2);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
count_i : Integer;

begin
  count_i := 0;
  repeat
      if Pos(LeftStr(Liste_1.Strings[count_i],12),Liste_2.Text) = 0 then
        begin
          Listbox3.Items.Add(Liste_1.Strings[count_i]);
        end
      else
        begin
          Listbox4.Items.Add(Liste_1.Strings[count_i]);
        end;
    ListBox4.Items.Delete(ListBox4.Items.IndexOf('rei'));    // rei weil der erste Buchstabe verschluckt wird, ist eig. frei
    count_i := count_i + 1;
  until (count_i = count_l1);
  count_l3 := Listbox3.Items.Count;
  count_l4 := Listbox4.Items.Count;
  Label9.Caption := 'Einträge: ' + IntToStr(count_l3);
  Label10.Caption := 'Einträge: ' + IntToStr(count_l4);
end;

_________________
"Könntest du deinen Egotrip mal kurz unterbrechen? Es ist was wichtiges passiert." - "Wenn es irgendwas wichtigeres als mein Ego gibt, verlange ich, dass man es auf der Stelle verhaftet und erschießt."
wurzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75

Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
BeitragVerfasst: Do 15.03.07 15:49 
Juhu,es funzt, du bist ein Schatz :D

Und es ist jetzt sackschnell, nicht wie vorher ^^

_________________
"Könntest du deinen Egotrip mal kurz unterbrechen? Es ist was wichtiges passiert." - "Wenn es irgendwas wichtigeres als mein Ego gibt, verlange ich, dass man es auf der Stelle verhaftet und erschießt."
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Do 15.03.07 16:49 
user profile iconwurzel hat folgendes geschrieben:
Ich hab ValueFromIndex benutzt, weil es mir am logischsten schien und es auch eig ganz gut funzt.

Weißt du denn wirklich, was ValueFromIndex macht??? Normalerweise benutzt man es, um aus 'Ingo=toll' das 'toll' herauszubekommen. Sowas in der Art hast du doch gar nicht als Ausgangslage in deinen zu untersuchenden Texten.
Lies mal die Online-Hilfe zu TListbox.Items.ValueFromIndex, damit dir das nicht nochmal passiert.

user profile iconwurzel hat folgendes geschrieben:
Aber erklär mir mal was du meisnt mit TStrings.Item.

Gar nichts. Das war im Augenblick geistiger Umnachtung geschrieben. Ich meinte TListbox.Items. :oops:
Ausdrücken wollte ich, dass du den Inhalt der Items direkt verarbeitest sollst, ohne das blöde ValueFromIndex. So machst du's jetzt aber ja auch.

user profile iconwurzel hat folgendes geschrieben:
Juhu,es funzt,

Zeigt deine Listbox4 jetzt auch die richtigen Wörter an oder fehlen immer noch Zeichen?
wurzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75

Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
BeitragVerfasst: Do 15.03.07 17:39 
Jo, wie oben im QT zu sehen ist. Ich arbeite nun mit TStringlist. Das klappt auch wunderbar. Jetzt hab ich zwar en anderes Problem, aber ich such erstmal. Und in der Listbox 4 funzt jetzt alles.

_________________
"Könntest du deinen Egotrip mal kurz unterbrechen? Es ist was wichtiges passiert." - "Wenn es irgendwas wichtigeres als mein Ego gibt, verlange ich, dass man es auf der Stelle verhaftet und erschießt."