AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi String-Result auf welche länge setzen?
Thema durchsuchen
Ansicht
Themen-Optionen

String-Result auf welche länge setzen?

Ein Thema von Pseudemys Nelsoni · begonnen am 16. Aug 2005 · letzter Beitrag vom 16. Aug 2005
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

String-Result auf welche länge setzen?

  Alt 16. Aug 2005, 11:53
Moin,

Delphi-Quellcode:
function irgendwas: string;
var
  PRes: PChar;
begin
  Result := '';
  PRes := @Result[1];
  // hier weiter
end;
Obiges Beispiel funktioniert ja nicht, da der Resultstring die Länge 0 hat.... nur auf welche Länge setze ich ihn, wenn ich noch gar nicht weiss wie lang er wird? Immer die Länge um 1 vergrössern kanns ja nicht sein oder?
Mario
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#2

Re: String-Result auf welche länge setzen?

  Alt 16. Aug 2005, 11:57
Ist aber die einzige Möglichkeit, wenn du nicht weist, wie groß der String wird.
Außer du gibst ihm erstmal eine Maximallänge, die du dann zum Schluss wieder kürzt (find ich aber ziemlich dirty).
Sebastian
  Mit Zitat antworten Zitat
shmia

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

Re: String-Result auf welche länge setzen?

  Alt 16. Aug 2005, 12:00
Dein Frage ist so gut wie unverständlich.
Aber ich zeige hier mal ein Beispiel, wie man mit SetLength und Zeigern arbeitet:

Der "Trick" bei folgender Funktion ist, dass zuerst so viel Speicher mit SetLength reserviert wird,
wie das Ergebnis max. haben kann.
Am Ende wird dann auf die wirkliche Größe reduziert.
Delphi-Quellcode:
function KonvertUmlaute(const s: string): string;
var
   i,slen: integer;
   src,dst: PChar;
begin
   slen := Length(s);
   SetLength(Result, slen * 2); // Ergebnis kann u.U. doppelt so groß

   if slen = 0 then
      Exit;

   src := PChar(@s[1]);
   dst := PChar(@Result[1]);

   for i := 1 to slen do
   begin
      case src^ of
         'ä': begin dst[0] := 'a'; dst[1] := 'e'; Inc(dst,2); end;
         'ö': begin dst[0] := 'o'; dst[1] := 'e'; Inc(dst,2); end;
         'ü': begin dst[0] := 'u'; dst[1] := 'e'; Inc(dst,2); end;
         'Ä': begin dst[0] := 'A'; dst[1] := 'E'; Inc(dst,2); end;
         'Ö': begin dst[0] := 'O'; dst[1] := 'E'; Inc(dst,2); end;
         'Ü': begin dst[0] := 'U'; dst[1] := 'E'; Inc(dst,2); end;
         'ß': begin dst[0] := 's'; dst[1] := 's'; Inc(dst,2); end;
      else
         dst^ := src^;
         Inc(dst);
      end;
      Inc(src);
   end;
   
   SetLength(Result, dst-PChar(@Result[1]));
end;
Andreas
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#4

Re: String-Result auf welche länge setzen?

  Alt 16. Aug 2005, 12:12
Hi,

Result := Result + 'das'; Solche Konstrukte sind insbesondere bei Rechenintensiven Prozessen sehr langsam.
Wenn du also gewissermassen abschätzen kannst, wie lang der String wird, setze ihn und
und leg am Ende noch einmal die Länge fest.

Ansonsten könntest du auch eine StringList verwenden, diese ist aber auch
nicht immer und überall einsetztbar.
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#5

Re: String-Result auf welche länge setzen?

  Alt 16. Aug 2005, 12:22
Moin,

danke für die Antworten und Dein Beispiel, shmia.

Das Problem ist aber, das ich die genaue Resultgrösse nicht wissen kann, da sie u.U nicht nur verdoppelt wird, sondern ganze Wörter hinzukommen sollen. Wenn man weiss das das Result nachher kleiner ist, als ein übergebener String, dann ist das ja alles ganz easy, da man das Result ja nur auf die Grösse des des Strings setzen muss. Umgekehrt ist das für mich aber nicht so einfach, ich denke ein "* 2" reicht da nicht.
Mario
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#6

Re: String-Result auf welche länge setzen?

  Alt 16. Aug 2005, 12:27
Wenn du das längste Wort ermittelt hast, ist das auch ganz easy,
dabei könnten allerdings Speicher-Probleme auftreten, je nachdem wieviel
Speicher du reservieren müsstest.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: String-Result auf welche länge setzen?

  Alt 16. Aug 2005, 13:37
API Funktionen arbeiten so, dass sie die Größe des benötigten Puffers zurückgeben, wenn zu wenig Speicher angefordert wurde. Üblicherweise geht man dann so vor, dass man die Funktion zweimal aufruft, einmal mit nil, um rauszubekommen wie viel Speicher man reservieren muss und dann noch ein zweites mal mit einem Puffer der entsprechend groß ist. GetWindowsDirectory ist zum Beispiel so eine Funktion, nur dass man da üblicherweise MAX_PATH nimmt, weil das Windowsverzeichnis nicht länger sein kann.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:20 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