| Autor |
Beitrag |
wurzel
      
Beiträge: 75
Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
|
Verfasst: 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
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
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
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Mi 14.03.07 12:44
wurzel 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 
      
Beiträge: 75
Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
|
Verfasst: 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 
      
Beiträge: 75
Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
|
Verfasst: Do 15.03.07 09:24
Hier noch mein bisheriger Quellcode
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 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 
      
Beiträge: 75
Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
|
Verfasst: 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 
      
Beiträge: 75
Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
|
Verfasst: 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?
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]); 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
      
Beiträge: 629
D7
|
Verfasst: Do 15.03.07 11:56
wurzel 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 
      
Beiträge: 75
Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
|
Verfasst: Do 15.03.07 12:15
Procedure geupdatet
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 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 
      
Beiträge: 75
Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
|
Verfasst: 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
      
Beiträge: 629
D7
|
Verfasst: 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 
      
Beiträge: 75
Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
|
Verfasst: Do 15.03.07 15:03
Ist garnicht schwer zu verstehen.
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')); 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 
      
Beiträge: 75
Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
|
Verfasst: Do 15.03.07 15:19
_________________ "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
      
Beiträge: 629
D7
|
Verfasst: 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 
      
Beiträge: 75
Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
|
Verfasst: 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 
      
Beiträge: 75
Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
|
Verfasst: Do 15.03.07 15:49
Habs jetzt mit TStringlist
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')); 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 
      
Beiträge: 75
Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
|
Verfasst: Do 15.03.07 15:49
Juhu,es funzt, du bist ein Schatz
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
      
Beiträge: 629
D7
|
Verfasst: Do 15.03.07 16:49
wurzel 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.
wurzel 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.
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.
wurzel hat folgendes geschrieben: | | Juhu,es funzt, |
Zeigt deine Listbox4 jetzt auch die richtigen Wörter an oder fehlen immer noch Zeichen?
|
|
wurzel 
      
Beiträge: 75
Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
|
Verfasst: 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."
|
|
|