Newsgroup: it.comp.lang.delphi
Titolo: Da String ad Array

Ciao a tutti.
Intanto grazie per i preziosissimi consigli del post precedente in cui
richiedevo un aiuto per convertire la data di sistema.
Ora mi sono 'incartato' nello sviluppo della mia applicazione in quanto ho
definito i campi del mio file tipizzato come array of char. 
Avrei necessità però di convertire la string derivante dalla function
FormatDateTime('yyyy', date) in array of char per inserirla nel mio file
tipizzato.
Il compilatore continua a darmi l'errore: Incompatible type: 'Array' and
'String'.
Esiste una funzione in Delphi che mi consenta di convertire il valore di
una string in un array ?
Vi ringrazio ma non ho ancora molta esperienza con Delphi e ho bisogno
dell'aiuto di qualcuno con un po' più di esperienza.
Grazie a tutti per le risposte.
Sparta
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

esempio d'uso della strpcopy preso dalla guida in linea:
var
   A: array[0..79] of Char;
   S: String;
begin
   S := 'Honk if you know Blaise.';
   StrPCopy(A, S);
   Canvas.TextOut(10, 10, string(A));
end;
A

 var

Grazie ancora per l'aiuto... ma non riesco a venirne a capo...
la mia situazione è la seguente:
AproIlFile..
Reset..
Seek..
Leggo il File e metto a zero alcuni campi del mio file tipizzato..
Unfile.pippo := #0#0;
Unfile.pluto := #0#0#0#0;
Unfile.data := //qui vorrei inserire il giorno della data di sistema...
Il mio file tipizzato è dichiarato per ogni campo come array [] of char...
non riesco a inserire la data perchè in formato string... e nemmeno con
strPcopy perchè ti tipo AnsiString...!
Grazie ancora per la pazienza..


procedure TForm1.Button1Click(Sender: TObject);
type
   tx = record
     dataop: array[0..9] of char;
   end;
var
   r: tx;
begin
   strpcopy(r.dataop , formatdatetime('yyyymmdd', now));
end;
A

 end;
ho provato... ma niente da fare... ho sempre il messaggio di errore 
incompatible type Array and PAnsiChar.
ho notato anche questo.. quando vado a scrivere la funzione strpcopy
utilizzando il code completion dopo aver richiamato la variabile del mio
file, viene richiamato solo il primo campo definito del file.... eppure
tutti gli altri sono stati definiti allo stesso modo...
eccoto il codice:
if ChAzzDate.Checked then
   begin
     AssignFile(S, NuovaDir + '\prova');
     Reset(S);
     Seek(S, PosItem);
     Read(S, UnFileS);
     UnFileS.GGCambioPwd := #0#0;
     UnFileS.MMCambioPwd := #0#0;
     UnFileS.AACambioPwd := #0#0#0#0;
     StrPCopy(UnFileS.MMcambioPwd, FormatDateTime('dd', Date)); //errore!
     StrPCopy(UnFileS.AAcambioPwd, FormatDateTime('yyyy',Date));
     StrPCopy(UnFileS.AAcambioPwd, FormatDateTime 'yyyy',Date));          
     Seek(S, PosItem);
     Write(S, UnFileSoperstu);
     CloseFile(Soperstu);
   end;
e questa è la struttura del mio file in una unit a parte...
unit uFileSoperstu;
interface
  type Toperstu = record
    CodStudio : array[0..0] of char ;
    CodOperatore: array [1..6] of char;
    Password: array[8..23] of char;
    NGgValidita: array [24..26] of char;
    GGCambioPwd: array [27..28] of char;
    MMCambioPwd: array [29..30] of char;
    AACambioPwd: array [31..34] of char;
    GGUltimoAccesso: array [35..36] of char;
    MMUltimoAccesso: array [37..38] of char;
    AAUltimoAccesso: array [39..42] of char;
    DatiVari: array [43..45] of char;
    DesOperatore: array [46..75] of char;
    TuttoilResto: array [76..601] of char;
  end;
ancora non riesco a capire per quale motivo ho questo errore...
qualcuno sa essermi d'aiuto ?
Grazie mille.


 Sparta
Prego
Giorgio

)

 (o PAnsiChar, che è l'equivalente per il momento).
Ti ringrazio per l'esauriente risposta... ma da newbie vorrei capire
precisamente cosa intendi per cast a PChar per la variabile array... devo
dichiarla come Pchar ? Potresti fare un esempio ?
Grazie !!!


 devo dichiarla come Pchar ? Potresti fare un esempio ?
Calma, non avevo notato la dichiarazione del tuo record nel messaggio
chilometrico che hai postato precedentemente, e adesso ho capito anche
il motivo del messaggio di Giorgio.
Se tu vuoi rendere il tuo array di caratteri /automaticamente/
compatibile con il tipo PChar, devi forzatamente fare in modo che
l'indice iniziale del vettore parta da zero; in caso contrario, devi
fare i salti mortali: copiare i caratteri in un buffer o singolarmente
in un vettore di caratteri compatibile.
Osservando la dichiarazione del tuo record, non capisco nemmeno come mai
tu debba avere degli indici simili...è un requisito fondamentale?


 in un vettore di caratteri compatibile.
Grazie ancora per la risposta. L'inesperienza mi ha fatto suddividere i
vari campi del mio file senza riportare l'indice iniziale da zero.
Facendo in questo modo ho risolto il problema e utilizzando la funzione
StrPCopy sono riuscito a riportare la data nel formato indicato.
Grazie a tutti per l'aiuto.
Arrivederci alle prossime !
Spara
