Autor Beitrag
spoof
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Fr 18.10.13 13:50 
Hey, ich habe ein Programm geschrieben, welches eine Txt Datei einliest. Die Txt kann man sich vorstellen wie zb eine Liste voll mit Kundendaten.
Diese Liste wird durch mein Programm nun in meine Tabelle eingeordnet.
Momentan hab ich aber noch das Problem dass einige Dinge doppelt und dreifach auftauchen in der Tabelle da sie auch doppelt und dreifach im Txt sind.
Jetzt möchte ich es schaffen dass wenn die Daten exakt so schon vorhanden sind, dass dann nichts hinzugefügt werden soll.

Ich hab das nun so gecodet dass ich in meiner Schleife, die zum zufügen zuständig ist, eine weitere Schleife mit eingebunden ist, die die bisher erstandene Liste erst nochmal durchgeht ob die Felder die zusammengehören identisch sind mit dem was gerade hinzugefügt werden soll.
Das einzigste Problem um das noch zum laufen zu bringen ist folgendes

ausblenden Delphi-Quelltext
1:
if (SG_List.Cells[0,counter+1]:=seite) = true					


Ich muss es irgendwie schaffen dass er fragt
wenn meine Zelle den selben Inhalt hat wie die Variable, dann...
Wie kann ich das machen? Dachte zuerst an Boolean hab aber noch nie damit gearbeitet und bin mir nich sicher ob und wie es damit geht?!

mfg
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Fr 18.10.13 13:54 
Suchst Du das hier?
ausblenden Delphi-Quelltext
1:
if SG_List.Cells[0,counter+1] = seite then					


[edit] Wobei das konzeptionell schon schöner zu lösen wäre, aber sei es erst einmal drum. [/edit]

Für diesen Beitrag haben gedankt: spoof
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 18.10.13 13:57 
Die Daten in ein StringGrid einzulesen, ist keine gute Idee, das ist nur unnötig langsam und kompliziert...
Lese die besser in eine Liste ein, prüfe dabei direkt beim Hinzufügen, ob ein Wert schon drin ist, und zeige die Liste dann nur in dem StringGrid an.

Visuelle Komponenten sind nur zur Anzeige und Eingabe da, nicht zur Datenhaltung...
spoof Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Fr 18.10.13 14:08 
user profile iconWasWeißDennIch hat folgendes geschrieben Zum zitierten Posting springen:
Suchst Du das hier?
ausblenden Delphi-Quelltext
1:
if SG_List.Cells[0,counter+1] = seite then					


[edit] Wobei das konzeptionell schon schöner zu lösen wäre, aber sei es erst einmal drum. [/edit]


Nein, ich weiß dass da noch ein then kommt, ich hab nur einen teil der if abfrage gepostet die sieht eig so aus:

ausblenden 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:
                      for i2 := 0 to counter+1 do     //liste bis zum jetzigen fund prüfen
                                begin

                                zwischencounter:=0;          //zwischencounter zurücksetzten um den neuen fund zu prüfen

                                  if (SG_List.Cells[0,counter+1]:=seite) = true and    //wenn die seiten genauso schon vorhanden sind zwischencounter + 1
                                     (SG_List.Cells[1,counter+1]:=seite2) = true and
                                     (SG_List.Cells[2,counter+1]:=seite3) = true and
                                     (SG_List.Cells[3,counter+1]:=seite4) = true and
                                     (SG_List.Cells[4,counter+1]:=seite5) = true then
                                        begin
                                            zwischencounter:=zwischencounter+1;       //zwischencounter + 1
                                       end;

                                end;

                            if zwischencounter = 0 then            //wenn noch nicht vorhanden da zwischencounter auf 0
                                begin

                                SG_List.Cells[0,counter+1]:=seite;      //Ausgeben
                                SG_List.Cells[1,counter+1]:=seite2;
                                SG_List.Cells[2,counter+1]:=seite3;
                                SG_List.Cells[3,counter+1]:=seite4;
                                SG_List.Cells[4,counter+1]:=seite5;

                                counter:=counter+1;             //Counter +1

                                end;


Ich bekomm in den Zeile wo ich abfrage:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
if (SG_List.Cells[0,counter+1]:=seite) = true and    //wenn die seiten genauso schon vorhanden sind zwischencounter + 1
                                     (SG_List.Cells[1,counter+1]:=seite2) = true and
                                     (SG_List.Cells[2,counter+1]:=seite3) = true and
                                     (SG_List.Cells[3,counter+1]:=seite4) = true and
                                     (SG_List.Cells[4,counter+1]:=seite5) = true then


Die Fehlermeldung Operator ist auf diesem Operadentyp nicht anwendbar.
Ich denke ich kann nicht prüfen ob die zelle := variable (in der variable sowie in der zelle stehen die seiten also strings)



user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Die Daten in ein StringGrid einzulesen, ist keine gute Idee, das ist nur unnötig langsam und kompliziert...
Lese die besser in eine Liste ein, prüfe dabei direkt beim Hinzufügen, ob ein Wert schon drin ist, und zeige die Liste dann nur in dem StringGrid an.

Visuelle Komponenten sind nur zur Anzeige und Eingabe da, nicht zur Datenhaltung...


Genauso passiert es ja, es wird in ein tstringgeladen der überprüft ob schon doppelt usw drin ist und dann nur die einzelnen in meine tabelle geladen.
Hab eine liste mit 1 Millionen Zeilen, geht innerhalb 1 sekunde keinerlei laggs.
spoof Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Fr 18.10.13 14:31 
user profile iconWasWeißDennIch hat folgendes geschrieben Zum zitierten Posting springen:
Suchst Du das hier?
ausblenden Delphi-Quelltext
1:
if SG_List.Cells[0,counter+1] = seite then					


[edit] Wobei das konzeptionell schon schöner zu lösen wäre, aber sei es erst einmal drum. [/edit]


Omg, hab dein Code falsch gelesen, genau das ging xD danke!
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 18.10.13 14:33 
user profile iconspoof hat folgendes geschrieben Zum zitierten Posting springen:
Ich bekomm in den Zeile wo ich abfrage:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
if (SG_List.Cells[0,counter+1]:=seite) = true and    //wenn die seiten genauso schon vorhanden sind zwischencounter + 1
                                     (SG_List.Cells[1,counter+1]:=seite2) = true and
                                     (SG_List.Cells[2,counter+1]:=seite3) = true and
                                     (SG_List.Cells[3,counter+1]:=seite4) = true and
                                     (SG_List.Cells[4,counter+1]:=seite5) = true then


1. Eine Zuweisung erfolgt mit :=, ein Vergleich dagegen lediglich mit =

2. Ein Vergleich zweiter Variablen mit = ergibt bereits einen Booleanwert. Du mußt diesen Wert nicht nochmal auf true testen, sondern schreibst einfach:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
if (SG_List.Cells[0,counter+1] = seite)  and
   (SG_List.Cells[1,counter+1] = seite2) and
   (SG_List.Cells[2,counter+1] = seite3) and
   (SG_List.Cells[3,counter+1] = seite4) and
   (SG_List.Cells[4,counter+1] = seite5) then

Für diesen Beitrag haben gedankt: spoof