Moin Moin und grüße aus Hamburg,
hoffe der Titel dieses Topics hat mein Problem ein wenig wiedergegeben.
erstmal wollte ich mich bedanken bei allen die mir bis jetzt geholfen haben, es ist unglaublich wieviel man hier lernen kann. Danke
Nachdem ich meine rankinglist in mein Grid geladen und nach Account Nr's sortiert hab sieht das in etwa so aus:
Account Number--------------------Rank---Name
23-6f739h89/u1-8371065j--------74-----Loom
23-ab648912/4b-96158478-----908-----GL_Omega21487
23-ab648912/4b-96158478-----103-----GL_Omega
23-ab648912/4b-96158478-----501-----Spaceman
23-77467863/98-d7370279-----626-----Frog
( die - hab ich nur gemacht um die leerzeichen zu ersetzten, sonst hätte ich das nicht so posten können, denkt sie euch bitte weg)
ich sehe also die 3 Playercharacter von GL_Omega anhand der gleichen Account Nr.
nun möchte ich das mein Programm folgendes tun soll:
Auf knopfdruck die gesamte Rankinglist sortieren nach den Account Nr's, das es wie folgt aussieht(der rank wird komplett ausser acht gelassen, interessant sind nur name und account nr):
23-ab648912
GL_Omega21487
GL_Omega
Spaceman
daher das der ERSTE teil der Account Nr (vor dem querstrich) angezeigt wird und darunter alle Playernamen die ebenfalls diese Account Nr. haben. zwischen den verschieden Account Nr. sollte eine leerzeile sein, also das die gesamte rankinglist in etwa wie das hier aussieht:
23-ab648912
GL_Omega21487
GL_Omega
Spaceman
23-45843658
Gondom
Loom
23-32479843
Tondor
Rankor
Erasor
Ilious
Zandra
etc etc.
der code mit dem ich meine stringlist lade:
Delphi-Quellcode:
procedure TForm1.butnGetClick(Sender: TObject);
var
datei : TextFile;
dateiname : String;
zeile : String;
inhalt : String;
perslist : Sarr;
pers : Sarr;
i, j : integer;
begin
dateiname := ('c:\rankinglist.htm');
AssignFile(datei, dateiname);
reset(datei);
inhalt := '';
repeat
Readln(datei, zeile);
inhalt := inhalt + zeile;
until eof(datei);
CloseFile(datei);
inhalt := getTable(inhalt);
perslist := getEntries(inhalt);
i := 0;
while (perslist[i] <> '') do
begin
pers := processAccount(perslist[i]);
// neu
if i+2>10 // oder was Du eben eingestellt hast
then Stringgrid1.RowCount:=i+2;
// weiter
for j := 0 to 11 do
begin
Stringgrid1.cells[j+1,i+1]:=pers[j];
end;
inc(i);
end;
reloadtable.Enabled := true;
reloadhtml.Enabled := true;
end;
end;
und sortiere:
Delphi-Quellcode:
procedure SortStringGrid(var GenStrGrid: TStringGrid; ThatCol: Integer);
const
// Define the Separator
TheSeparator = '@';
var
CountItem, I, J, K, ThePosition: integer;
MyList: TStringList;
MyString, TempString: string;
begin
// Give the number of rows in the StringGrid
CountItem := GenStrGrid.RowCount;
//Create the List
MyList := TStringList.Create;
MyList.Sorted := False;
try
begin
for I := 1 to (CountItem - 1) do
MyList.Add(GenStrGrid.Rows[I].Strings[ThatCol] + TheSeparator +
GenStrGrid.Rows[I].Text);
//Sort the List
Mylist.Sort;
for K := 1 to Mylist.Count do
begin
//Take the String of the line (K – 1)
MyString := MyList.Strings[(K - 1)];
//Find the position of the Separator in the String
ThePosition := Pos(TheSeparator, MyString);
TempString := '';
{Eliminate the Text of the column on which we have sorted the StringGrid}
TempString := Copy(MyString, (ThePosition + 1), Length(MyString));
MyList.Strings[(K - 1)] := '';
MyList.Strings[(K - 1)] := TempString;
end;
// Refill the StringGrid
for J := 1 to (CountItem - 1) do
GenStrGrid.Rows[J].Text := MyList.Strings[(J - 1)];
end;
finally
//Free the List
MyList.Free;
end;
end;
Zum größten Teil hab ich es u.a eurer Hilfe zu verdanken das ich mein programm bis hierhin fertigstellen konnte, danke dafür.
Allerdings hab ich keinen blassen schimmer wie ich das oben beschriebene bewerkstelligen kann, könnte mir vorstellen das es ein wenig komplizierter ist als das vorangegangene.
Bin relativ neu in Delphi, einiges hab ich bereits gelernt aber mit dem grid kenn ich mich noch nicht so aus. Suchfunktion hat mir keine Hilfe gebracht leider.
So hoffe ich das mir jemand hierbei behilflich sein kann, vielleciht an hand meines codes
Ich sag mal Danke im voraus Delphi-Freunde, hoffe ihr versteht mein Problem.
Rhodan