Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Stringstelle auf "leer" prüfen (https://www.delphipraxis.net/128290-stringstelle-auf-leer-pruefen.html)

DonnieDarko_02 27. Jan 2009 13:49


Stringstelle auf "leer" prüfen
 
Ich habe einen String
Delphi-Quellcode:
stri:string[10];
nun wird diesem string aus einem editfeld ein eingegebener name übergeben, das ganze dient einem highscore...doch es soll immer auf
die vollen zehn zeichen aufrunden, damit die listbox gleichmäßig aussieht

Delphi-Quellcode:
for s:=0 to 10 do
begin if stri[s]={Was muss ich hier als eigenschaft einsetzen???} then stri[s]:=''; end;

Meflin 27. Jan 2009 13:54

Re: Stringstelle auf "leer" prüfen
 
Mir ist nicht ganz klar, was du erreichen willst - aufrunden?!
Sollen die Leerzeichen am Anfang oder am Ende angehängt werden?!

HenKst 27. Jan 2009 13:54

Re: Stringstelle auf "leer" prüfen
 
Du kannst nicht prüfen ob eine Stelle im String leer ist, da steht immer irgendetwas, wenn da nichts steht ist der string zuende und du kriegst ne accessviolation wenn du auf die Adresse zugreifen willst.

Aber das bringt uns ja schon zur(bzw zu einer) Lösung, du prüfst ob du am letzen zeichen vom string vorbei bist also
Delphi-Quellcode:
if s > length(stri) then stri:= stri + ' ';
GreeZ HenKst

Noedel 27. Jan 2009 13:55

Re: Stringstelle auf "leer" prüfen
 
ich denke du suchst length()
Gibt dir die Länge des Strings zurück -> als Integer.

Fussball-Robby 27. Jan 2009 13:58

Re: Stringstelle auf "leer" prüfen
 
Wenn du (so wie ich das verstanden habe) am Anfang jedes Strings Leerzeichen anhängen willst, bis der String 10 Zeichen lang ist, würde ich das so machen:
Delphi-Quellcode:
while Length(str) < 10 do
  s := ' ' + s;
Edit: Obwohl, besser so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  stri: String;
const
  Len = 10;
begin
  stri :=Edit1.Text;
  stri := StringOfChar(' ', Len - Length(stri)) + stri;
  Memo1.Lines.Add(stri);//oder was auch immer zur Ausgabe
end;

Noedel 27. Jan 2009 14:03

Re: Stringstelle auf "leer" prüfen
 
ich dachte, hinten dran?
aber ist ja wayne :D
Benutz doch dazu am Besten ne ValueListEditor oder nen Stringgrid :)
Übrigens gleichmäßig bekommst du das ganze eh nicht, wenn du die Font nicht auf Courier oder Courier new setzt ... Da kannst du so viele Leerzeichen machen, wie du willst, es wird immer schief

Fussball-Robby 27. Jan 2009 14:05

Re: Stringstelle auf "leer" prüfen
 
Zitat:

Zitat von Noedel
ich dachte, hinten dran?

Es geht hier doch nur ums Prinzip :mrgreen: Und mit dem bisher geschriebenen muss der Threadersteller wohl was anfangen müssen.

DonnieDarko_02 27. Jan 2009 14:07

Re: Stringstelle auf "leer" prüfen
 
Korrekt...ihr habt mir mit diesen lösungsansätzen wirklich geholfen...vielen dank

DeddyH 27. Jan 2009 14:08

Re: Stringstelle auf "leer" prüfen
 
Da würde ich doch eher rechtsbündig ausrichten als mich so zu verrenken.

himitsu 27. Jan 2009 14:22

Re: Stringstelle auf "leer" prüfen
 
statt
[quote="Fussball-Robby"]
Delphi-Quellcode:
while Length(str) < 10 do
  s := ' ' + s;
oder
Delphi-Quellcode:
stri := StringOfChar(' ', Len - Length(stri)) + stri;
einfach
Delphi-Quellcode:
stri := stri + '         ';
die Definition war ja
Delphi-Quellcode:
Var stri:string[10];
und dort wird alles über 10 Zeichen abgeschnitten :stupid:

Fussball-Robby 27. Jan 2009 14:23

Re: Stringstelle auf "leer" prüfen
 
Zitat:

Zitat von himitsu
und dort wird alles über 10 Zeichen abgeschnitten :stupid:

Ja, wenn ich das mal früher gewusst hätte.. :mrgreen:

Hawkeye219 27. Jan 2009 14:34

Re: Stringstelle auf "leer" prüfen
 
Hallo,

ich würde dann noch die Delphi-Referenz durchsuchenFormat-Funktion ins Spiel bringen:

Delphi-Quellcode:
var
  Ausgabe, Text : string;
  Laenge       : Integer;
begin
  Ausgabe := Format("%10s", [Text]); // rechtbündig
  Ausgabe := Format("%-10s", [Text]); // linksbündig

  // oder variabel:

  Laenge := 10;
  Ausgabe := Format("%*s", [Laenge, Text]); // rechtsbündig
  Ausgabe := Format("%-*s", [Laenge, Text]); // linksbündig
end;
Aber es wurde ja bereits gesagt: das alles funktioniert nur, wenn in der ListBox ein nicht-proportionaler Zeichensatz (z.B. Courier New) eingestellt ist, was normalerweise nicht besonders gut aussieht. Besser wäre wahrscheinlich die Erweiterung der Listbox auf mehrere Spalten oder die Verwendung eines geeigneteren Controls, z.B. einer ListView.

Gruß Hawkeye


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