Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String in Spalte durch xxx ersetzen (https://www.delphipraxis.net/114959-string-spalte-durch-xxx-ersetzen.html)

SaFu 3. Jun 2008 13:33


String in Spalte durch xxx ersetzen
 
HI

Und zwar hab ich mal wieder folgende Frage.

Wie ersetze ich in einer bestimmten Spalte in einem StringGrid die letzten drei Zeichen durch xxx

in Excel habe ich es schon hinbekommen

Delphi-Quellcode:
=Links(O2;LÄNGE(O2)-3)&"xxx"
wollte es jetzt aber mit einem klick Automatisieren??

Gruß Sascha

taaktaak 3. Jun 2008 13:37

Re: String in Spalte durch xxx ersetzen
 
Wo automatisieren? In Excel? In Delphi?

SaFu 3. Jun 2008 13:39

Re: String in Spalte durch xxx ersetzen
 
In Delphi

und dannach speicher ich das ganze als .xls was schon Teilweise funzt

taaktaak 3. Jun 2008 13:41

Re: String in Spalte durch xxx ersetzen
 
Na, dann kannst du diese Prozedur von Deddy die wir heute Vormittag hatten entsprechend anpassen, eben nicht mehr die maximale Breite ermitteln, sondern die Stringsprüfen und ggf. die letzten 3 Zeichen ersetzen.

SaFu 3. Jun 2008 13:44

Re: String in Spalte durch xxx ersetzen
 
Ihr wollt mich heute ärgern :stupid:

Ich blick bei diesem code nicht durch.

Erklär mir den bitte

taaktaak 3. Jun 2008 13:45

Re: String in Spalte durch xxx ersetzen
 
Also in etwa so:
Delphi-Quellcode:
procedure ConvertStrings(sl:TStrings);
var i, Current: integer;
begin
  for i := 0 to Pred(sl.Count) do s1[i]:=copy(s1[i],1,length(s1[i])-3)+'xxx'
end;
Geht sicherlich noch eleganter :roll:

SaFu 3. Jun 2008 13:49

Re: String in Spalte durch xxx ersetzen
 
Das meine ich ja wo hole ich den TStrings her und Warum Pred(vorgänger)

taaktaak 3. Jun 2008 13:53

Re: String in Spalte durch xxx ersetzen
 
Aufruf mit
ConvertStrings(StringGrid1.Cols[xx]);
mit xx = Spaltennummer, in der ausgetauscht werden soll

Pred(), weil die Indices mit 0 beginnen, das höchste Element hat dann den Index Count-1 und das ist das gleiche wie pred(Count)

SaFu 3. Jun 2008 14:38

Re: String in Spalte durch xxx ersetzen
 
Was mach ich jetzt falsch wenn eine zelle leer ist

Delphi-Quellcode:
procedure ConvertStrings(sl:TStrings);
var i :integer;
begin
  for i := 1 to Pred(sl.Count) do
  if sl[i] = '' then
   begin
    sl[i]:='leer'
   end
   else
  sl[i]:=copy(sl[i],1,length(sl[i])-3)+'xxx'
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  ConvertStrings(StringGrid1.Cols[14]);
end;

taaktaak 3. Jun 2008 14:50

Re: String in Spalte durch xxx ersetzen
 
Ich kann nichts falsches erkennen, ausser einem nicht notwendigem begin..end. Welches Ergebnis erwartest du denn? Wenn vorher nix in der Zelle war, sollte anschließend "leer" drin stehen.

SaFu 3. Jun 2008 14:54

Re: String in Spalte durch xxx ersetzen
 
ja das tut es aber nicht es stehen immernoch drei xxx drin??

Klaus01 3. Jun 2008 14:56

Re: String in Spalte durch xxx ersetzen
 
Delphi-Quellcode:
sl[i]:=copy(sl[i],1,length(sl[i])-3)+'xxx'
copy liefert einen LeerString zurück und es werden drei x angehangen.

Vielleicht solltest Du vorher prüfen ob der String auch mehr als 3 Zeichen beinhaltet.

Grüße
Klaus

SaFu 3. Jun 2008 15:01

Re: String in Spalte durch xxx ersetzen
 
Das mach ich doch ich prüfe vorher ob ein leer string vorhanden ist wenn ja soll er leer reinschreiben

DeddyH 3. Jun 2008 15:04

Re: String in Spalte durch xxx ersetzen
 
Du musst prüfen, ob der String länger ist als 3 Zeichen, Du löschst ja schließlich auch 3 Zeichen raus.

SaFu 3. Jun 2008 15:20

Re: String in Spalte durch xxx ersetzen
 
Na irgenwie will das net wenn ich auf länger prüfe schreibt er überall leer rei

Delphi-Quellcode:
procedure ConvertStrings(sl:TStrings);
var i :integer;
begin
  for i := 1 to Pred(sl.Count) do
  if sl[i] > Char(3) then
   begin
    sl[i]:='leer'
   end
   else
  sl[i]:=copy(sl[i],1,length(sl[i])-3)+'xxx'
end;

Klaus01 3. Jun 2008 15:23

Re: String in Spalte durch xxx ersetzen
 
Sascha, heute ist nicht Dein Tag, oder?

Delphi-Quellcode:
procedure ConvertStrings(sl:TStrings);
var i :integer;
begin
  for i := 1 to Pred(sl.Count) do
    begin
      if length(sl[i]) <= 3 then
        begin
          sl[i]:='kleiner als 3 Zeichen'
        end
      else
        sl[i]:=copy(sl[i],1,length(sl[i])-3)+'xxx'
    end;
end;
Grüße
Klaus

[edit] delphi tags vergessen

DeddyH 3. Jun 2008 15:25

Re: String in Spalte durch xxx ersetzen
 
Wieso fangt Ihr eigentlich bei 1 an, hab ich was übersehen?
Zitat:

Delphi-Quellcode:
for i := 1 to Pred(sl.Count) do


taaktaak 3. Jun 2008 15:26

Re: String in Spalte durch xxx ersetzen
 
Ja Kruzifix, Sascha!

Die Behandlung auf <=3 Zeichen muss natürlich in den else-Zweig.

Zunächst muss du aber einmal die Anforderung definieren: Was soll den geschehen, wenn der String nur aus 3 oder weniger Zeichen besteht?

Klaus01 3. Jun 2008 15:27

Re: String in Spalte durch xxx ersetzen
 
Zitat:

Zitat von DeddyH
Wieso fangt Ihr eigentlich bei 1 an, hab ich was übersehen?
Zitat:

Delphi-Quellcode:
for i := 1 to Pred(sl.Count) do


Vielleicht hat er ja eine FixedRow definiert.
Grüße
Klaus

taaktaak 3. Jun 2008 15:28

Re: String in Spalte durch xxx ersetzen
 
Hihi, gute Frage!
Zunächst hatten wir bei 0 begonnen, im Laufe des Gefechts hat sich da aber 'ne 1 eingeschlichen...

// edit: Autsch!!! - Die Hitze!!!!

SaFu 3. Jun 2008 15:38

Re: String in Spalte durch xxx ersetzen
 
Zitat:

Zitat von Klaus01
Zitat:

Zitat von DeddyH
Wieso fangt Ihr eigentlich bei 1 an, hab ich was übersehen?
Zitat:

Delphi-Quellcode:
for i := 1 to Pred(sl.Count) do


Vielleicht hat er ja eine FixedRow definiert.
Grüße
Klaus

Ja die 1 Col soll natürlich nicht xxx werden da das meine Überschrift ist

SaFu 3. Jun 2008 15:41

Re: String in Spalte durch xxx ersetzen
 
Oh jetzt ist mir aufgefallen das ich das alles garnicht brauche

nein war ein scherz ich danke euch für die Mühe die ich euch heute mal wieder gemacht habe, wenn Ihr jetzt alle hier sein würdet, dann hätte ich schon längst ne Runde ausgegeben.

aber jetzt geht alles danke (morgen kommt der zweite Teil :mrgreen: )

Dicken Gruß Sascha

DeddyH 3. Jun 2008 15:43

Re: String in Spalte durch xxx ersetzen
 
Würde ich trotzdem nicht so machen, dann lieber einen weiteren Parameter für den Index des ersten Elementes. Diesen kannst Du ja vorbelegen und StringGrid.FixedRows da reinschreiben. Der Grund ist, wenn Du die Anzahl der fixen Zeilen mal änderst, wirst Du Dich vermutlich zunächst wundern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:44 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