![]() |
AW: String in Array einlesen
:?:
also Obiwan (Sir Rufo), ich will mich nicht so weit aus dem Fenster lehnen ich würde mal behaupten das dein Quellcode nicht geht, bzw nicht das macht was er will: in SQL ausgedrückt will er Select Sp1,sp2,sp3 from wasauchimmer order by sp2 |
AW: String in Array einlesen
@Sir Rufo Stimmt, abgesehen davon, dass
Delphi-Quellcode:
in diesem Fall eben so einfach nicht funktioniert
Result := CompareStr( Left.Col2, Right.Col2 );
|
AW: String in Array einlesen
Ich will mal versuchen das auf die altmodische Art zu Lösen:
Code:
var ozeile:integer; // in die Form zwei Tmemo und eine Tlistbox einfügen .... memo1.lines.loadfromfile('ursprung.txt'); // Textladen Listbox1.items.clear; // Zwischenpuffer zum sortieren Listbox1.Sorted:=False; // Sortierung aus for i:=0 to memo1.lines.count-1 do begin if Pos(#9,Memo1.lines[i])>0 then begin // SP2 ermitteln ListBox1.items.Add(Copy(Memo1.lines[i],Pos(#9,Memo1.lines[i])+1),255); // Sp2+sp3 einsetzen ListBox1.Items[ListBox1.items.count-1]:=Copy(ListBox1.Items[ListBox1.items.count-1],1,Pos(#9,ListBox1.Items[ListBox1.items.count-1])))+intTostr(i); // sp3 entfernen und ID mit übergeben end; Listbox1.Sorted:=True; // sortieren memo2.Lines.clear; // hier nun das ergebnis speichern for i:=0 to ListBox1.items.count-1 do begin // ursprüngliche zeile herausfinden ozeile:=StrToInt(Copy(ListBox1.items[i],Pos(#9,ListBox1.Items[i]+1),255)); //id der sortierten Listbox auslesen memo2.lines.Add(memo1.lines[ozeile]); // ursprüngliche zeile übergeben end; // // in memo2 steht nun das ergebnis Sollte ich Tippfehler oder Klammern vergessen haben, so bitte ich dies zu entschuldigen, da ich das hier einfach mal so reingehackt habe ..... |
AW: String in Array einlesen
Wie kommt Ihr eigentlich darauf, dass das nicht funktionieren soll? In diesem Beispiel ist FList ein privates Formularfeld vom Typ TList.
Delphi-Quellcode:
Das ergibt dann folgende Ausgabe:
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; //Sortieren function CompareFunc(Item1, Item2: PRec): integer; begin Result := AnsiCompareStr(Item1^.Col2, Item2^.Col2); end; procedure TfrmTest.btnSortClick(Sender: TObject); begin FList.Sort(@CompareFunc); end; ... //Ausgeben for i := 0 to FList.Count - 1 do begin Rec := PRec(FList[i])^; mmoAusgabe.Lines.Add(Format('%s;%s;%s', [Rec.Col1, Rec.Col2, Rec.Col3])); end; Zitat:
|
AW: String in Array einlesen
@DeddyH
genau so :) |
AW: String in Array einlesen
Zitat:
Zitat:
|
AW: String in Array einlesen
Evtl. handelt es sich hier um das Hummel-Paradoxon.
Mein Code weiß nicht, dass er gar nicht funktionieren darf, und macht es trotzdem ;) Ein kleines Testprogramm mit und ohne Generics
Delphi-Quellcode:
program ListSort;
{$APPTYPE CONSOLE} {$R *.res} // Generics-Switch {$IF CompilerVersion>=20} {$DEFINE GENERICS} {$IFEND} // uses {$IFDEF GENERICS} System.Generics.Defaults, System.Generics.Collections, {$ENDIF} Classes, SysUtils; type PMyData = ^TMyData; TMyData = record Col1, Col2, Col3 : string; end; {$IFDEF GENERICS} procedure WriteList( AList : TList<TMyData> ); var LIdx : Integer; begin for LIdx := 0 to AList.Count - 1 do Writeln( AList[LIdx].Col1, ',', AList[LIdx].Col2, ',', AList[LIdx].Col3 ); end; procedure Test; var LList : TList<TMyData>; LRec : TMyData; begin Writeln( 'Generic Version' ); Writeln; LList := TList<TMyData>.Create; try // Add Data LRec.Col1 := 'a'; LRec.Col3 := 'c'; LRec.Col2 := 'z'; LList.Add( LRec ); LRec.Col2 := 'a'; LList.Add( LRec ); LRec.Col2 := 'm'; LList.Add( LRec ); // Output Data Writeln( 'Before Sort' ); WriteList( LList ); Writeln; // Sort Data LList.Sort( TComparer<TMyData>.Construct( function( const Left, Right : TMyData ) : Integer begin Result := CompareStr( Left.Col2, Right.Col2 ); end ) ); // Output Data Writeln( 'After Sort' ); WriteList( LList ); Writeln; finally LList.Free; end; end; {$ELSE} function CompareMyDataCol2( Item1, Item2 : Pointer ) : Integer; begin Result := CompareStr( PMyData( Item1 ).Col2, PMyData( Item2 ).Col2 ); end; procedure WriteList( AList : TList ); var LIdx : Integer; begin for LIdx := 0 to AList.Count - 1 do Writeln( PMyData( AList[LIdx] ).Col1, ',', PMyData( AList[LIdx] ).Col2, ',', PMyData( AList[LIdx] ).Col3 ); end; procedure AddData( AList : TList; ARec : TMyData ); var LNewRec : PMyData; begin New( LNewRec ); LNewRec^ := ARec; AList.Add( LNewRec ); end; procedure Test; var LList : TList; LRec : TMyData; begin Writeln( 'NON-Generic Version' ); Writeln; LList := TList.Create; try // Add Data LRec.Col1 := 'a'; LRec.Col3 := 'c'; LRec.Col2 := 'z'; AddData( LList, LRec ); LRec.Col2 := 'a'; AddData( LList, LRec ); LRec.Col2 := 'm'; AddData( LList, LRec ); // Output Data Writeln( 'Before Sort' ); WriteList( LList ); Writeln; // Sort Data LList.Sort( @CompareMyDataCol2 ); // Output Data Writeln( 'After Sort' ); WriteList( LList ); Writeln; finally LList.Free; end; end; {$ENDIF} begin try Test; except on E : Exception do Writeln( E.ClassName, ': ', E.Message ); end; ReadLn; end. |
AW: String in Array einlesen
OT:
@Sir Rufo : Lass dich nicht ärgern, ich finde deine Lösungen immer sehr kompetent, kurz und knackig. Da ich Informatik nicht studiert habe, muss sich da zwar mein Köpfchen oft sehr anstrengen um alles zu kapieren, aber wenn ichs dann kapiert habe, bin ich wieder ein Quäntchen schlauer und zufriedener als zuvor ... Ich mag Luke-Power 8-) |
AW: String in Array einlesen
Hab ich da etwas nicht mitbekommen?
Die Lösung von BLUP (hab ich jetzt nicht getestet oder ganz genau gelesen) ist doch wohl das, was gesucht wurde? Sir Rufo hat es mit Feldern/Records gelöst, was meiner Meinung nach sauberer ist. Ist übrigens ein schönes Beispiel dafür, daß man die Darstellung von den Daten trennen sollte. (Peine Paris Salzgitter reicht auch, es muß nicht immer Airbus sein ) Gruß K-H |
AW: String in Array einlesen
Zitat:
(Danke für die Blumen :)) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 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