Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Stringgrid Spielerei... Fragen! (https://www.delphipraxis.net/105073-stringgrid-spielerei-fragen.html)

mr_emre_d 15. Dez 2007 01:21


Stringgrid Spielerei... Fragen!
 
Hallo liebes Community

Ich wollte mal heute mit einem neuen Komponenten arbeiten, mit dem ich noch nie etwas am Hut gehabt
ich speichere in ein array -->( namen:array[0..4] of string;) ein paar Namen ab ( zb. 'Peter Lustig' ).
Dann will ich, dass die jeweiligen Namen in 2 teilen aufgesplittet werden vn (vorname) =Peter & nn (nachname)=Lustig.
Soweit,so gut!
Wenn ich die vn bzw nn einfügen will, erscheint im Stringgrid an der bestimmten Stelle etwas Komisches...
Kann sein das beim splitten etwas schief gegangen ist :S
hier der code:

Delphi-Quellcode:
var    i,j:integer;
 vn,nn,name:string;
......
 for j := 0 to 4 do begin
    for i := 0 to length(namen[j]) do begin
    name:=namen[j];                                
      if name[i]=' ' then begin
         vn:=copy(name,0,length(name[i])-1);
         nn:=copy(name,length(name[i])+1,length(name));
         //nn:=delete(name,0,length(vn)+2); --> so müsste das eigentlich auch gehen aber funzt ned.. :(
      end;
    end;
    stringgrid1.Cells[2,j+1]:=vn;
    stringgrid1.Cells[3,j+1]:=nn;
  end;

Martin K 15. Dez 2007 01:33

Re: Stringgrid Spielerei... Fragen!
 
1.
Das erste Element eines Strings hat den Index 1, nicht 0.
Die innere Schleife müsste also so aussehen:
Delphi-Quellcode:
for i := 1 to length(namen[j]) do
2.
Delphi-Quellcode:
length(name[i])
gibt dir sehr Wahrscheinlich immer 1 zurück, da name[i] nur ein Zeichen (des Strings) ist ;)
Wenn du den String von 1 bis zur Position i-1 haben willst, müsste das wohl so aussehen:
Delphi-Quellcode:
copy(name, 1, i - 1);
Überlege selbst, wie nun das zweite Copy aussehen müsste.

3. Tipps:
Du kannst dir das Leben viel einfacher machen, denn es gibt die Funktion:
Delphi-Quellcode:
function Pos(const substr: string; const str: string): Integer;
Diese gibt dir die Position eines Substrings in einem String zurück.
Du könntest z.B. ' ' (Leerzeichen) als Substring übergeben und sparst dir somit die innere Schleife ;)
Delphi-Quellcode:
i := Pos(' ', name);

mr_emre_d 15. Dez 2007 01:44

Re: Stringgrid Spielerei... Fragen!
 
vielen dank,funzt..
Delphi-Quellcode:
  for j := 0 to 4 do begin
    for i := 1 to length(namen[j]) do begin
    name:=namen[j];
      if name[i]=' ' then begin
         vn:=copy(name,1,i-1);
         nn:=copy(name,i+1,length(name));
         //nn:=delete(name,1,length(vn)+2);
      end;
    end;
    stringgrid1.Cells[2,j+1]:=vn;
    stringgrid1.Cells[3,j+1]:=nn;
  end;
ich werd wohl nächstes Mal nicht mehr so spät programmieren.. :???:


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