![]() |
Stringgrid, in bestimmter Spalte nach String suchen...
Hallo,
ich möchte in einem Stringgrid in einer bestimmten Spalte nach einem String suchen und diesen ersetzen bzw. um genau zu sein möchte ich mehrere verschiedene Strings suchen und diese je nach String durch eine Zahl ersetzen. Konnte dazu bisher nichts finden, die Befehle wären zu einem Interessant oder auch gerne nen Code Beispiel. Gruß Budda |
Re: Stringgrid, in bestimmter Spalte nach String suchen...
Das StringGrid bietet seine Daten über 3 (Array-) Properties an: Cells[], Rows[] und Cols[].
Da du in einer Spalte suchen willst ist das Property Cols[] das Richtige. Beispiel:
Delphi-Quellcode:
Stellt sich nur noch die Frage wozu die ganzen Ersetzungen.
var
spalte : TStrings; p : integer; begin spalte := StringGrid1.cols[2]; // die 3. Spalte p := spalte.IndexOf('rot'); // suche nach "rot" if p >= 0 then spalte[p] := 'grün'; // ersetzen end; Möglicherweise sollte man dein Problem ganz anderst lösen. |
Re: Stringgrid, in bestimmter Spalte nach String suchen...
So zum Beispiel:
Delphi-Quellcode:
var i:integer;
with mystringgrid do begin for i:=0 to RowCount-1 do begin if Cells[SPALTE, i] =mystring then Cells[SPALTE, i] :='mynumber'; //----oder----// Cells[SPALTE, i] :=replace(Cells[SPALTE,i],'mystring','mynumber'); //bin mir nicht sicher, ob der Aufruf richtig ist... end; end; |
Re: Stringgrid, in bestimmter Spalte nach String suchen...
Zitat:
muss ich danach das Stringgrid aktualisieren damit ich die Änderung sehe? Denn so sehe ich nichts. Und kann ich nachdem ich das Stringgrid geändert habe diese als Tabstop getrennte txt Speichern? Gruß Budda |
Re: Stringgrid, in bestimmter Spalte nach String suchen...
Zitat:
Nee, nicht ernst gemeint, mal im Ernst. In Delphi ist das wie ich unten geschrieben habe pos(substring, string); EDIT: quote-Tags korrogiert EDIT2: ich habe mir das nochmal genauer durchgelesen. Das macht echt so den Anschein, asl hättest du ein bißchen zuvile Javascript geproggt. Zitat:
Zitat:
Delphi-Quellcode:
spalte.IndexOf('rot') <-- Wieso ist hier eigentlich kein array?? Also das mit strings?
if spalte.IndexOf('rot') >=0 then spalte[p] := 'grün';
Ähm, bitte noch bedenken, dass man das dann noch wegen der Syntax umschreiben muss:
Delphi-Quellcode:
Naja, ich weiß nicht, mir fällt da noch 'ne ganze Menge auf, ich bin jetzt erstmal was verwirrt.
if pos('rot',spalte.strings[i]) >=0 then spalte[p] := 'grün';
|
Re: Stringgrid, in bestimmter Spalte nach String suchen...
Zitat:
Also spalte ist eine Stringliste, und mit der Methode [TStrings.]IndexOf erspare ich mir eine Schleife über alle Strings in der Liste. In der Variablen p wird die Position des Strings in der Liste gespeichert. Wenn man nur einen Teilstring suchen möchte, dann kann man IndexOf natürlich nicht gebrauchen. Zitat:
Über dieses TStrings-Objekt greife ich direkt auf die Zellen einer Spalte des StringGrids zu. Wenn du's nicht glaubst, dann versuche mal das:
Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var spalte : TStrings; i : Integer; begin spalte := StringGrid1.cols[1]; // die 2. SPALTE // wird jetzt mit Inhalten befüllt for i := 0 to spalte.Count-1 do begin spalte[i] := IntToStr(i)+ ' Hallo'; end; // beachte, dass das Objekt spalte weder mit Create erzeugt, // noch mit Free zerstört wird // auch ein Refresh des Grid ist nicht nötig ! end; |
Re: Stringgrid, in bestimmter Spalte nach String suchen...
0ok, ich glaube dir...
nur müsstest du dann nicht das Teil auch als TStringList deklaruieren? |
Re: Stringgrid, in bestimmter Spalte nach String suchen...
Hallo,
habe meinen Fehler nun gefunden. Das geht jetzt schonmal vom Prinzip her. Allerdings muss ich für jede fundstelle den Button drücken sprich wenn ich ihn drücke ersetzt er den ersten Fund in der Spalte und hört dann auf so das ich für den nächsten Fund wieder auf den Button klicken muss. Gruß Budda |
Re: Stringgrid, in bestimmter Spalte nach String suchen...
Dann versuch es doch mal so:
Delphi-Quellcode:
IndexOf gibt -1 zurück, falls keine Fundstelle vorliegt. Ansonsten halt die Nr des Eintrages.
var
spalte : TStrings; p : integer; begin repeat spalte := StringGrid1.cols[2]; // die 3. Spalte p := spalte.IndexOf('rot'); // suche nach "rot" if p >= 0 then spalte[p] := 'grün'; // ersetzen until p < 0; end; Kleiner 0 nur um auf Nummer sicher zu gehen, man weiß ja nie, ob alles so klappt, wie es soll :-D |
Re: Stringgrid, in bestimmter Spalte nach String suchen...
Hatte ganz übersehen, dass du speuichern wolltest...
Delphi-Quellcode:
procedure TForm1.speichern;
var t : TextFile; c,r : integer; begin AssignFile(t,'c:\stringgrid.txt'); Rewrite(t); for r := 0 to StringGrid1.RowCount-1 do begin for c := 0 to StringGrid1.ColCount-1 do begin Write(t,StringGrid1.Cells[c,r]+';'); //kenne ASCII für Tab gerade nicht, //deswegen ; zum Trennen end; Writeln(t,''); //neue Zeile end; CloseFile(t); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00: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