AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Stringgrid, in bestimmter Spalte nach String suchen...
Thema durchsuchen
Ansicht
Themen-Optionen

Stringgrid, in bestimmter Spalte nach String suchen...

Ein Thema von Budda · begonnen am 20. Jan 2005 · letzter Beitrag vom 27. Jan 2005
Antwort Antwort
Seite 1 von 2  1 2      
Budda

Registriert seit: 3. Sep 2003
96 Beiträge
 
Delphi 7 Professional
 
#1

Stringgrid, in bestimmter Spalte nach String suchen...

  Alt 20. Jan 2005, 14:20
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Stringgrid, in bestimmter Spalte nach String suchen...

  Alt 20. Jan 2005, 14:50
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:
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;
Stellt sich nur noch die Frage wozu die ganzen Ersetzungen.
Möglicherweise sollte man dein Problem ganz anderst lösen.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#3

Re: Stringgrid, in bestimmter Spalte nach String suchen...

  Alt 20. Jan 2005, 15:25
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;
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
Budda

Registriert seit: 3. Sep 2003
96 Beiträge
 
Delphi 7 Professional
 
#4

Re: Stringgrid, in bestimmter Spalte nach String suchen...

  Alt 21. Jan 2005, 16:30
Zitat von shmia:
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:
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;
Stellt sich nur noch die Frage wozu die ganzen Ersetzungen.
Möglicherweise sollte man dein Problem ganz anderst lösen.
Hallo,
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
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#5

Re: Stringgrid, in bestimmter Spalte nach String suchen...

  Alt 21. Jan 2005, 16:49
Zitat von shmia:
p := spalte.IndexOf('rot'); // suche nach "rot"
end;
Du bist aber schon ein bißchen JavaScript geschädigt, oder
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 von shmia:
spalte := StringGrid1.cols[2]; // die 3. Spalte
Hier kopierst du gerade die komplette Spalte nochmal. Das ist doch totale RAM-Verschwendung. Und CPU-Verschwendung eignlch auch.
Zitat von shmia:
p := spalte.IndexOf('rot'); // suche nach "rot"
if p >= 0 then
spalte[p] := 'grün'; // ersetzen
Warum nicht gleich
if spalte.IndexOf('rot') >=0 then spalte[p] := 'grün'; spalte.IndexOf('rot') <-- Wieso ist hier eigentlich kein array?? Also das mit strings?
Ähm, bitte noch bedenken, dass man das dann noch wegen der Syntax umschreiben muss:
if pos('rot',spalte.strings[i]) >=0 then spalte[p] := 'grün'; Naja, ich weiß nicht, mir fällt da noch 'ne ganze Menge auf, ich bin jetzt erstmal was verwirrt.
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Stringgrid, in bestimmter Spalte nach String suchen...

  Alt 21. Jan 2005, 18:50
Zitat von yankee:
Zitat von shmia:
p := spalte.IndexOf('rot'); // suche nach "rot"
end;
Du bist aber schon ein bißchen JavaScript geschädigt, oder
Nö, das ist doch korrekter Delphi Code.
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 von yankee:
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 von shmia:
spalte := StringGrid1.cols[2]; // die 3. Spalte
Hier kopierst du gerade die komplette Spalte nochmal. Das ist doch totale RAM-Verschwendung. Und CPU-Verschwendung eignlch auch.
Hier wird nicht kopiert, sondern spalte ist ein Objektzeiger.
Ü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;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#7

Re: Stringgrid, in bestimmter Spalte nach String suchen...

  Alt 21. Jan 2005, 20:30
0ok, ich glaube dir...
nur müsstest du dann nicht das Teil auch als TStringList deklaruieren?
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
Budda

Registriert seit: 3. Sep 2003
96 Beiträge
 
Delphi 7 Professional
 
#8

Re: Stringgrid, in bestimmter Spalte nach String suchen...

  Alt 24. Jan 2005, 08:48
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
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#9

Re: Stringgrid, in bestimmter Spalte nach String suchen...

  Alt 24. Jan 2005, 09:05
Dann versuch es doch mal so:

Delphi-Quellcode:
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;
IndexOf gibt -1 zurück, falls keine Fundstelle vorliegt. Ansonsten halt die Nr des Eintrages.
Kleiner 0 nur um auf Nummer sicher zu gehen, man weiß ja nie, ob alles so klappt, wie es soll
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#10

Re: Stringgrid, in bestimmter Spalte nach String suchen...

  Alt 24. Jan 2005, 09:21
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz