2017-10-15 11 views
0

Je veux savoir s'il existe une fonction qui découpe un Array of AnsiString et renvoie Array of AnsiString. La fonction Copy renvoie Array of String, il m'est donc arrivé de rechercher en ligne une autre solution mais je n'ai rien trouvé.Comment copier un tableau de chaînes ANSI pour obtenir un autre tableau de chaînes ANSI

Avons-nous une solution à cela?

J'utilise Free Pascal.

+0

Simple à écrire votre propre fonction, non? –

+0

@DavidHeffernan C'est un moyen. –

+0

Désolé, je ne peux pas vraiment donner un sens à votre q: que voulez-vous que 'Copy' ne fera pas? – MartynA

Répondre

4

Copier copie toute array of X à un autre array of X. Si X est AnsiString, il copie (ou tranche) à un array of AnsiString.

Le projet de démonstration suivant montre que le résultat est un array of AnsiString, car il traite chaque "caractère" individuel. Si le résultat était un UnicodeString, vous ne verriez que le premier caractère (par exemple, 'One' serait le seul "octets" 'O'#0'n'#0'e'#0#0#0, donc la boucle s'arrêterait après le 'O').

program Project1; 

uses 
    SysUtils; 

type 
    TAnsiStringArray = array of AnsiString; 

procedure Main; 
var 
    A, B: TAnsiStringArray; 
    I: Integer; 
    P: PAnsiChar; 
begin 
    A := TAnsiStringArray.Create('Zero', 'One', 'Two', 'Three'); 

    { Plain Copy, nothing special: } 
    B := Copy(A, 1, 2); { Copies 'One' and 'Two' } 

    for I := Low(B) to High(B) do 
    begin 
    P := PAnsiChar(B[I]); 
    while P^ <> #0 do 
    begin 
     Write(P^, '-'); 
     Inc(P); 
    end; 
    Writeln; 
    end; 
end; 

begin 
    Main; 
    Readln; 
end. 

Sortie:

O-n-e- 
T-w-o- 

Il n'y a donc pas besoin de faire quelque chose de spécial. Utilisez simplement Copy tel quel.


FPC 3.0.0 sur Windows.