![]() |
Verschiedene Zeilen im Grid auslesen und wiedergeben
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:
und sortiere:
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;
Delphi-Quellcode:
Zum größten Teil hab ich es u.a eurer Hilfe zu verdanken das ich mein programm bis hierhin fertigstellen konnte, danke dafür.
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; 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 :gruebel: Ich sag mal Danke im voraus Delphi-Freunde, hoffe ihr versteht mein Problem. Rhodan |
Re: Verschiedene Zeilen im Grid auslesen und wiedergeben
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo rhodan,
du hast nicht gesagt, wohin die gruppierte Liste soll - oder? Ich schreibe sie in ein Memo, aber du kannst dir den Code sicher anpassen.
Delphi-Quellcode:
Grüße vom marabu
procedure TDemoForm.GroupButtonClick(Sender: TObject);
var iRow: integer; sPrev, sCurr: string; begin Memo.Lines.Clear; for iRow := 1 to MAX_ROWS do begin sCurr := StringGrid.Cells[CI_ACCT, iRow]; if sCurr <> sPrev then begin if iRow > 1 then Memo.Lines.Add(''); Memo.Lines.Add(sCurr); Memo.Lines.Add(StringOfChar('-', 10)); sPrev := sCurr; end; Memo.Lines.Add(StringGrid.Cells[CI_NAME, iRow]); end; end; |
Re: Verschiedene Zeilen im Grid auslesen und wiedergeben
Marabu.....was kann ich sagen?
Ich fühle momentan einfach nur tiefe dankbarkeit. Vor 10 minuten hab ich luftsprünge gemacht und hab seltsame laute von mir gegeben :lol: ich habs vorher ohne deinen quellcode versucht bin aber kläglich gescheitert. es funktioniert nun alles bei mir. Ich hab enormen respekt vor dir, du hast exakt das hinbekommen was ich wollte. :thumb: DANKE das du dir die zeit für mich genommen hast :balloon: Rhodan |
Re: Verschiedene Zeilen im Grid auslesen und wiedergeben
Rhodan, du machst mich ganz verlegen. Auf jeden Fall beneide ich dich um deine Fähigkeit Luftsprünge machen zu können. Das mit den seltsamen Lauten, ja das könnte ich auch, aber Luftsprünge...
Freundliche Grüße vom marabu |
Re: Verschiedene Zeilen im Grid auslesen und wiedergeben
:wink:
aber sag mal, die zahl MAX_ROWS ist ja fest definiert, kann ich da nicht die einstellungen von meinem grid einbinden, das er exakt soviele zeilen im memo erstellt wie benötigt werden? weil, geb ich eine zu hohe zahl ein hab ich ne menge leerzeilen am endeim memo, geb ich zuwenig ein hat er nicht alle chars im memo (ich lade ja verschieden lange rankinglisten). nette grüße von rhodan |
Re: Verschiedene Zeilen im Grid auslesen und wiedergeben
Hallo Rhodan,
du kannst MAX_ROWS einfach zu einer Form-Variablen machen und initialisierst diese Variable nach dem Parsen der Ranking-Liste mit der Anzahl - Length(persList) - der Einträge in deinem Array, dann wird dein Grid korrekt initialisiert und es gibt keine Leerzeilen. Das Memo musst du nicht vorbehandeln, da es dynamisch wächst. Grüße vom marabu |
Re: Verschiedene Zeilen im Grid auslesen und wiedergeben
hey,
jo soweit klappt es, hab das geändert(length(perslist)) was du vorgeschlagen hast, allerdings sind immernoch leere zeilen am ende des memo. der grund:
Delphi-Quellcode:
hab ich ja angegeben in meinem button zum laden des grid und des memo.
perslist : Sarr;
Delphi-Quellcode:
allerdings ist dummerweise "Sarr" als fest definierte anzahl angegeben, hast du ne ahnung wie ich das ebenfalls von der grid-zeilen anzahl abhängig machen kann? :|
var
Form1: TForm1; type Sarr = Array [0..2000] of String; grüße von rhodan |
Re: Verschiedene Zeilen im Grid auslesen und wiedergeben
Sobald ich Inhalt und Aufbau der Datei RANKING.HTM verstehe, kann ich dir sicher helfen.
Grüße vom marabu |
Re: Verschiedene Zeilen im Grid auslesen und wiedergeben
ist mir ja schon fast peinlich :oops:
danke dir ganz herzlichst, rhodan :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:59 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-2025 by Thomas Breitkreuz