Einzelnen Beitrag anzeigen

sk0r

Registriert seit: 1. Mai 2007
181 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Teile von "array of char" in "String&

  Alt 4. Okt 2007, 13:50
Ich gehe mal davon aus, dass du einen Bereich im Array kopieren willst.
Also nicht nur von Null bis zu einer bestimmten Zahl, sondern auch von
Vier auf eine bestimmte Zahl. Mit CopyMemory kannst du Chars kopieren.
Durch den letzten Parameter kannst du bestimmen, wie viele Buchstaben du
kopieren willst. Den Startpunkt kannst du ermitteln, indem du die Startadresse
mit der gewünschten Startzahl addierst. Beispiel:

Delphi-Quellcode:
procedure CopyArrayPart(lpszDest: PString; lpszSource: Pointer; dwStart, dwLength: DWord);
var
  lpszStringToPChar: PChar;
begin
  Dec(dwStart); //dwStart verringern, damit man nicht bei Null anfangen muss (Char Start bei Pascal Strings ist ja bei Eins und nicht bei Null, wie es bei nullterminierenden Strings der Fall ist).
  GetMem(lpszStringToPChar, dwStart + dwLength); //Speicher für ein PChar allozieren (so groß, dass man die gewünschten Buchstaben speichern kann)
  CopyMemory(lpszStringToPChar, Pointer(Cardinal(lpszSource) + dwStart), dwLength); //Die angegebene Anzahl der Buchstaben von der Startaddresse + ItemIndex kopieren
  lpszDest^ := strpas(lpszStringToPChar); //PChar in den String kopieren
  FreeMem(lpszStringToPChar, dwStart + dwLength); //PChars Speicher leeren
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  lol: array[0..27-1] of Char;
  kaka: String;
  g: Byte;
begin
  //Das Char Array mit dem ABC LowerCase füllen
  for g := 0 to 27-2 do
    lol[g] := chr(g+97);

  kaka := ''; //Leerer String

  CopyArrayPart(@kaka, @lol, 3, 5); //Ab dem dritten(eigentlich viertem) Buchstaben anfangen und von da an fünf Buchstaben kopieren

  ShowMessage(kaka);

  exitprocess(0);
end;
Habe das gerade aus dem Kopf geschrieben. Ist sicherlich verbesserungsbedürftig.^^
Ob es jetzt schön schnell ist, weiß ich nicht. Ich finde es aber nicht so umständlich,
als wenn man eine For-Schleife benutzt.

Mfg: sk0r
  Mit Zitat antworten Zitat