![]() |
AW: String in Array einlesen
Hallo,
also bitte mal der Reihe nach. Vielleicht hab ich ja was falsch verstanden. Dann korrigiert mich bitte. So schrieb es der TE: Zitat:
Spalte 2 + Spalte 1 + Spalte 3, also nicht nur nach Spalte 2. Demzufolge kann die Lösung mit TList so nicht funktionieren, weil eben NUR nach Spalte 2 sortiert wird, und Spalte 1 und 3 werden in der Sortierung ignoriert. Der record könnte dann beispielsweise so aussehen:
Delphi-Quellcode:
...wobei Cols dann Col2+Col1+Col3 wäre und die Sortierung dann...
type
PMyData = ^TMyData; TMyData = record Col1, Col2, Col3 : string; Cols : string; end;
Delphi-Quellcode:
....und bei der Ausgabe dann wieder den string zusammensetzen aus Col1+Col2+Col3.
function CompareMyDataCol2( Item1, Item2 : Pointer ) : Integer;
begin Result := CompareStr( PMyData( Item1 ).Cols, PMyData( Item2 ).Cols ); end; |
AW: String in Array einlesen
Das hatten wir doch schon
In SQL würde das so aussehen
SQL-Code:
Wie er Strings sortiert weiß er, aber nicht wie er nach der Sortierung den logischen Zusammenhang wieder hinbekommt. ;)
SELECT
Col1, Col2, Col3 FROM MyTable ORDER BY Col2 |
AW: String in Array einlesen
Das habe ich (und zumindest Sir Rufo auch) so nicht verstanden. Vielmehr geht es darum, nach Spalte 2 zu sortieren, aber die Zugehörigkeit zu den anderen beiden Werten nicht zu verlieren. Und selbst wenn nach mehreren Spalten in einer bestimmten Reihenfolge sortiert werden soll, erweitert man den Callback entsprechend und fertig.
Delphi-Quellcode:
function CompareFunc(Item1, Item2: PRec): integer;
begin Result := AnsiCompareStr(Item1^.Col2, Item2^.Col2); if Result = 0 then Result := AnsiCompareStr(Item1^.Col1, Item2^.Col1); if Result = 0 then Result := AnsiCompareStr(Item1^.Col3, Item2^.Col3); end; |
AW: String in Array einlesen
Das ist der Punkt bzw. Unterschied...ich hab's so verstanden:
Code:
SELECT
Col1, Col2, Col3 FROM MyTable ORDER BY Col2, Col1, Col3 |
AW: String in Array einlesen
Hallo an alle:
mal zum Verständnis: man will niemanden ärgern, wir wollen ja alle nur mal Helfen und manchmal lernt man was neues :thumb: was DeddyH in seinem Quellcode macht und Sir Rufo im Quellcode (seinen ersten Beitrag angedeutet hat), ist einen Record der Liste zu übergeben und die Sortierfunktion entsprechen umzuleiten, das nach dem 2'ten Feld sortiert wird. Meine Lösung macht das auf altbackene weise, so kann man es aber nachvollziehen (ist aber langsamer). |
AW: String in Array einlesen
Nunja, das Hauptproblem, das ich persönlich mit Deinem Code habe, ist die Vermischung von Logik und Darstellung. Es liest sich so, als ob man unbedingt Memos bzw. Listboxen bräuchte, um das Problem zu lösen. Das geht natürlich auch, ist aber IMO unschön.
Nothing for ungood |
AW: String in Array einlesen
Nun ich wurde mal als Listboxenprogrammierer beschimpft :thumb: um schnell eine Lösung zu machen, die würde ja einem Prof nicht gefallen, aber der wird ja auch nicht nach dem Ergebnis bezahlt sondern nur nach .... :roll:
Mit XE4 und iOS wurde mir klar, das ist das neueste vom neuen, da geht ja fast alles über meine liebe Listbox und die kann ja jetzt auch richtig viel :lol: |
AW: String in Array einlesen
Zitat:
|
AW: String in Array einlesen
Hallo,
vielen Dank für die rege Beteiligung. Ich war letzter zeit verhindert und kann das Problem jetzt erst wieder anpacken. Ich bin zur Zeit dabei mein String in records einzulesen wie bei DeddyH
Delphi-Quellcode:
wie gesagt mein string sieht folgendermaßen aus
type
PRec = ^TRec; TRec = record Col1, Col2, Col3: string; end; ... //Befüllen var NewRec: PRec; begin New(NewRec); NewRec^.Col1 := 'Anton'; NewRec^.Col2 := 'Berta'; NewRec^.Col3 := 'Cäsar'; FList.Add(NewRec); New(NewRec); NewRec^.Col1 := 'August'; NewRec^.Col2 := 'Bär'; NewRec^.Col3 := 'C++'; FList.Add(NewRec); New(NewRec); NewRec^.Col1 := 'Auf der Mauer'; NewRec^.Col2 := 'Auf der Lauer'; NewRec^.Col3 := 'Dideldum dideldei'; FList.Add(NewRec); end
Delphi-Quellcode:
mystring := col1 + #9 + col2 + #9 +col3;
mit ungefähr hundert zeilen. Wie mach ich denn das am Besten den Pointer NewRec^.Col1 eine Schleife zu verpassen das der mir nur die col1 mit den 100 Werten aus dem string einliest. |
AW: String in Array einlesen
Ein wenig konfus was Du da willst.
Gehen wir mal davon aus, daß Du eine Funktion hast, die die Inhalte aus einem String auslesen kann (
Delphi-Quellcode:
)
wert:=getcol(i,mystring);
dann müßte die Verarbeitung ungefähr so aussehen:
Delphi-Quellcode:
Wenn Du nur eine Spalte lesen willst dann vllt. so:
var
NewRec: PRec; begin Stringlist:=tStringlist.Create; Stringlist.Loadfromfile('meinedaten.txt'); for i:=0 to Stringlist.count-1 do begin New(NewRec); NewRec^.Col1 := getcol(1,Stringlist[i]); NewRec^.Col2 := getcol(2,Stringlist[i]); NewRec^.Col3 := getcol(3,Stringlist[i]); FList.Add(NewRec); end;
Delphi-Quellcode:
var
NewRec: PRec; begin Stringlist:=tStringlist.Create; Stringlist.Loadfromfile('meinedaten.txt'); for i:=0 to Stringlist.count-1 do begin New(NewRec); NewRec^.Col1 := getcol(1,Stringlist[i]); NewRec^.Col2 := ''; NewRec^.Col3 := ''; FList.Add(NewRec); end; U.U wäre es besser mit einem
Delphi-Quellcode:
zu arbeiten, da könntest Du die einzelnen spalten direkt über einen Index ansprechen.
Array of Col
Aber bitte nicht vergessen vorher alle Felder zu initialsieren. Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:13 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 by Thomas Breitkreuz