Newsgroup: it.comp.lang.delphi
Titolo: manipolare stringhe;

Ho un array di char e vorrei  conoscerne la lunghezza (ho usato length ma
funziona solo su string, altrimenti
restituisce il numero di array), e poterne usate o copiare in un altra
variabile solo la parte che mi interessa.
es . S [1],[3],[7] // questo non lo posso fare.
ringrazio.

Ciao Andrea,
Andrea 'AG' clubtin ha scritto:

mi pare che ci sia un' istruzione adatta e se non erro è la "High".
Tu dai un' occhiata all' help che forse ci ho azzeccato !! :-))
Però  non ricordo visto che non mi è mai servita.
Ma c' è un altra istruzione che tiene conto della memoria che occupa quella
variabile che gli passi come parametro.
Quindi se il tuo array si chiama "Pippo", scrivi:
Dimensione_Array:=SizeOf(Pippo);
la funzione SizeOf, ti restituisce i byte che occupa la variabile che gli
passi come parametro.
Visto che il tuo array è di CHAR, dove ogni elemento occupa 1 byte, la
dimensione dell' array corrisponde al numero degli elementi. Comunque tu
dovresti conoscere la dimensione dell' array a priori, o sbaglio ?
Riguardo la copia di soli alcuni caratteri dell' array in un altra
variabile, puoi scrivere ad esempio:
Var_Copia:=Pippo[1] + Pippo[3] + Pippo[7];
Ok ?
Ti saluto......ciao !!
P.S. Se l' istruzione "High" soddisfa le tue aspettative, ti conviene
utilizzarla al posto della "SizeOf".
Antonio Tarolla
BSSoftware Tips Mailing - List Support

 es . S [1],[3],[7] // questo non lo posso fare.
vorresti copiare il 1°, 3° e 7° carattere in modo da averli consecutivi in
un'altra variabile?
Se sì:
  type MioTipo=array[0..10] of char;
Function Aggiungi(var NuovoAr:MioTipo;
VecchioArr:MioTipo;indice:integer):boolean;
begin
Result:=false;
if indice<=Length(VecchioArr) then
  begin
  if length(NuovoAr)+1<sizeof(NuovoAr) then
     begin
     NuovoAr[length(NuovoAr)]:=VecchioArr[indice-1];
     Result:=true;
     end;
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var MioArray,NuovoArray:MioTipo;
begin
MioArray:='Ciaoz';
if Aggiungi(NuovoArray,MioArray,5) then
showmessage('Ok'+#13#10+MioArray+#13#10+NuovoArray)
                                    else showmessage('No');
Prova  a vedere se è quel che cercavi... :-)
Ciao
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
AntiSpam: remove the underscore from the e-mail address to reply

Effettivamente sono stato troppo vago e mi scuso.
In pratica ho usato GetEnvironmentVariable per ottenere un array di
caratteri contente la QUERY_STRING passata tramite il metodo
POST di una pagina HTML ad un programmino CGI che sto facendo con
Delphi4 Professional. Ora vorrei intercettare la query (es. 'name=Andrea')
e trasformarla in una stringa da passare a query.SQL ('%Andrea%'), la
procedura finale produrrebbe 'Select * from dbname where name like
'%Andrea%'.
Riassumendo come si puň manipolare una stringa in pascal copiandone solo
una parte e sapendo che la query č sempre di dimensioni e contenuto
differente.
Temo ancora di non essere stato troppo chiaro. Ringrazio.
Andrea 'AG'

ho risolto il problema delle stringhe e, già che ci sono vi chiedo di
aiutarmi a finire questo delirio di programma
che mi sta letteralmente esaurendo. Preciso che sono un principiante di
Delphi.
Il problema per chiudere questo programma console che legge un parametro
passato sa una pagina
HTML mediante Post, lo modifica trasformandolo da es. 'nome=Boa' in una
vabile 'Boa' e poi,
mediante concat aggiunge '%' all'inizio ed alla fine in modo di creare una
riga SQL 'Select * from
animals where name like '%Boa%'. Ho pensato di farlo in tre linee (vds.
codice) SQL ma mi da una
marea di errori che non riesco a gestire. Ho allora letto in giro ed ho
scoperto che le query usano dei
parametri, anche se non ho capito come. Infatti il prg qui sotto da il
seguente errore
--------Exception EListError in module CGI.EXE at 00010FDC.
List index out of bounds (1).---------
Il ciclo if mi evita di aprire la query senza parametri, il  Datamodule
contiene solo un componente Query.
Si tratta di un applicazione cgi che genera dinamicamente una tabella
contenente dati da un Database.
Ultimo problema : Successivamente dovrò usare una tabella Access97 e non
riesco a disabilitare la
maschera di Login, come posso fare?!
Ecco il listato:
program PROVACGI;
{$APPTYPE CONSOLE}
uses
  Windows,
  SYSUTILS,
  cgigreat in '..\cgigreat.pas' {Dm: TDataModule};
var
  ReqVar: string;
  VarValue: array [0..200] of Char;
  temporanea : string;
begin
     ReqVar:='QUERY_STRING';
     GetEnvironmentVariable (PChar(ReqVar),
     VarValue, 200);
  temporanea := VarValue;
  delete (temporanea,1,4);
  Dm:=Tdm.Create(nil);
  writeln('Content type: text/html');
  writeln;
  writeln('<HTML><HEAD>');
  writeln('<TITLE>CGI Variables</TITLE>');
  writeln('</HEAD><BODY>');
  writeln('<H1>CGI Variables</H1>');
  writeln('<HR><PRE>');
  temporanea := concat ('''%',temporanea,'%''');
  writeln('<H3>PARAMETRI : <H3>'+temporanea);
  if temporanea <> '''%%''' then begin
  Dm.Query1.close;
  Dm.Query1.SQL.clear;
  Dm.Query1.SQL.add ('Select * from animals');
  Dm.Query1.SQL.add('where name like ');
  Dm.Query1.Params[1].Asstring := temporanea;
  Dm.Query1.SQL.add (':params[1]');
  Dm.Query1.open;
  writeln('<H3>PARAMETRI : <H3>'+ temporanea);
  writeln('<TR>  <TABLE BORDER=1>');
  Dm.Query1.First;
  while not Dm.Query1.eof do begin
    writeln('<P><TD>'+dm.Query1.fields[0].asstring+'</TD>');
    writeln('<TD>'+dm.Query1.fields[1].asstring+'<P></TD></P>');
  Dm.Query1.next
  end;
  end else begin
  Dm.Query1.close;
  Dm.Query1.SQL.clear;
  Dm.Query1.SQL.add ('Select * from animals where name like ''%C%''');
  Dm.Query1.Open;
  writeln('<TR>  <TABLE BORDER=1>');
  while not Dm.Query1.eof do begin
    writeln('<P><TD>'+dm.Query1.fields[0].asstring+'</TD>');
    writeln('<TD>'+dm.Query1.fields[1].asstring+'<P></TD></P>');
  Dm.Query1.next
  end;
  end;
  writeln('</TR>');
  writeln('</HTML>');
  writeln('</BODY>');
  Dm.Query1.close;
  Dm.Destroy;
end.
Ringrazio e spero di poter ricambiare, purtroppo non sto dando grande
supporto al NewsGroup ma spero
di poterlo fare presto.
Andrea 'AG'

 di poterlo fare presto.
Per la maschera di Access.. ti conviene usare un componente database in cui
puoi inserire come parametri il nome utente e la password, e mettere la
proprietà showlogin (o simile) a false... poi dovrai legare la query al
database mettendo nella proprietà databasename della query il nome del
componente database. Ah naturalmente il database dovrà essere collegato alla
fonte DSN dell'odbc . Spero in questo di esserti stato di aiuto... per
l'altro tuo problema, sinceramente, non ho capito proprio cosa ti serve...
--
saluti
FDA