Newsgroup: it.comp.lang.delphi
Titolo: Aiuto su TMemoryStream

ma non ne vengo fuori
Da cosa?
A.

Uhm... mi sa che sono andato un po' troppo oltre le mie conoscenze... In fin
dei conti è solo da qualche mese che 'mastico' il Delphi...
Questo brano dalla guida di Delphi l'ho letto anch'io, ma non mi è stato di
grande aiuto (magari ci fosse un esempio: la guida di Delphi è un po' troppo
avara di esempi, secondo me). La funzione Read dà come risultato il numero
di bytes trasferiti al buffer, ma che me ne faccio? :-)
Dove posso imparare qualcosa di più sugli stream? Ho sfogliato il testo di
Cantù in libreria: mi pare che ne dedica un paio di facciatine. Ho sfogliato
l'indice del testo di Texeira e Pacheco su Amazon.com; e anche qui c'è una
sole voce dedicata agli stream. Ho letto quasi per intero 'Teach Yourself
Borland Delphi 4 in 21 Days' e gli stream vengono appena accennati. Ho
scaricato la guida 'non ufficiale' Jedi - Dolphin dal sito della Borland ed
ho trovato anche lì pochi esempi, per lo meno per ciò che riguarda gli
stream.
Forse dovrei orientarmi su qualche testo più generale sulla programmazione?
Grazie comunque dell'aiuto che hai cercato di darmi,
Maury


Ciao,
 a mio avviso fai benissimo a provare ;-)
Premetto che non ho mai usato i TMemoryStream...
io quando leggevo (da file nel mio caso) a una zona di memoria (che avevo
preso con New) per leggere carattere per carattere del blocco che avevo
letto usavo i puntatori a carattere: ^char
Per esempio se avevo un blocco PIPPO che avevo preso con New
potevo spostare il mio puntatore a carattere all'inizio di Pippo (con
CARATTERE:=Pippo)
e per leggere il carattere per esempio in un if:
IF CARATTERE^ ='"' THEN PiccolaCorrezzione;
Per spostare il puntatore (anche se a te non serve) basta fare
Pippo:=Pippo+1;
Non so se questo può esserti di aiuto, ma se magari TMemoryStream avesse un
puntatore alla zona di memoria dove scrive (e mi pare che abbia una
proprietà Memory) magari potresti risolvere allo stesso modo...
Apprestorisentici,
    Dariosky

 diverso da '"' (le virgolette doppie). Come si fa?
In realtà è un problema molto semplice.
Non ho ben capito che controllo vuoi fare sul primo carattere ma questo
funziona:
VAR test:char;
IF (IMS.read(test,1)=1)and(test=[quel che vuoi tu]) then
 begin
//  è il file che volevo. okkio che ora la posizione nello stream non è
all'inizio. per tornare all'inizio bisogna usare .seek(...)
 end;
praticamente leggi il primo carattere con read mettendolo dentro ad un char.
il controllo ..)=1.. è per controllare che lo stream non sia vuoto e che
almeno un carattere sia stato letto. poi controlla se il primo carattere è
quello che soddisfa la tua ricerca. Delphi esegue il controllo degli AND
nella identica sequenza con la quale è costruita l'IF, quindi non ci sono
problemi.
Ciao
Matteo

 proprietą Memory) magari potresti risolvere allo stesso modo...
Perche', Position fa schifo?
cmq, per rispondere alla domanda originale, se lo stream ha gia'
caricato il file,
with aMemStr do begin
  Seek(0, soFromBeginning);    // riavvolge
  // copia 1 byte dallo stream a FirstChar
  if Read(FirstChar, 1) < 1 then
    raise Exception.Create('File is empty');
end;
Saluti
Paolo Arosio

Grazie a tutti, mi siete stati di grandissimo aiuto.
Maury