Newsgroup: it.comp.lang.pascal
Titolo: lettura file di testo e string :(

forse ho trovato la soluzione, ma ho bisogno di un vostro aiutino.
il programma 'conto' deve ricevere in input i campi di un record R
bene : string[10];
data : integer;
ammontare : real;
commento : string;
e poi li scrive in un file di testo.
Il mio problema alla seconda esecuzione del programma ottenenvo un
Runtime error 106.
Adesso ho capito perchรจ : la parola corrispondente al campo bene non
veniva scritta con
10 caratteri e quindi poteva capitare che nella lettura del file di
testo
non + vuoto (II esecuzione del progr.) il campo bene e quello data
fossero considerati un campo solo
con evidenti incompatibilitร  conseguenti.
la mia domanda รจ :
vorrei che in output il campo bene fosse sempre lungo 10 caratteri e
quindi se la parola รจ piรน piccola di
10 caratteri il progr. deve aggiungere gli spazi rimanenti.
Se questo non accade, ottengo sempre l'errore 106 di cui sopra.
Come dovrei modificare il codice a tal proposito ?
grazie mille :)
claudio
P.S.:
questo ่ il codice :
 program conto;
 type   TipoNodo = record
                     bene : string[10];
                     data : integer;
                     ammontare : real;
		     commento : string;
		  end;
	TipoListaConto = ^TipoRecordListaConto;
	TipoRecordListaConto = record
					info : TipoNodo;
					next : TipoListaConto;
				  end;
	TipoStringa = string[20];
	TipoStringa1 = string[12];
 var
  risposta : char;
  lista : TipoListaConto;
  R : TipoNodo;
  nomefile : string[10];
  mese : integer;
procedure LeggiLista(var lis : TipoListaConto; nomefile : string);
  var datafile : text; paux : TipoListaConto; R : TipoNodo;
begin
assign(datafile, nomefile);
reset(datafile);
new(paux);
paux^.next := lis;
lis := paux;
while not eof(datafile) do
 begin
  with R do
   readln(datafile, bene, data, ammontare, commento);
  new(paux^.next);
  paux := paux^.next;
  paux^.info := R;
 end;
 paux := lis;
 lis := paux^.next;
 dispose(paux);
end;
  procedure InserisciTestaLista(var lis : TipoListaConto; elem :
TipoNodo);
   begin
   if lis = NIL then
    begin
     new(lis);
     lis^.info := elem;
     lis^.next := NIL;
    end;
   end;  (*InserisciTestaLista*)
  procedure InserisciCodaLista(var lis : TipoListaConto; elem :
TipoNodo );
   var ultimo, paux : TipoListaConto;
   begin
    new(paux);
    paux^.info := elem;
    paux^.next := NIL;
    if lis = NIL then
     lis := paux
    else
     begin
      ultimo := lis;
      while ultimo^.next <> NIL do
       ultimo := ultimo^.next;
      ultimo^.next := paux;
     end;
   end;  (*InserisciCodaLista*)
  procedure ScriviLista(nomefile : string; lis : TipoListaConto);
   var datafile : text;
  begin
   assign(datafile, nomefile);
   rewrite(datafile);
(*scrittura della lista*)
   while lis <> NIL do
    begin
     with lis^.info do
     writeln(datafile, bene, '  ', data, '  ', ammontare:4:2, '  ',
commento);
     lis := lis^.next;
    end;
    close(datafile);
   end;   (*ScriviElemento*)
 begin
   writeln('mese odierno (mm):');
   readln(mese);
   case mese of
    1 : nomefile := 'gennaio.txt';
    2 : nomefile := 'febbraio.txt';
    3 : nomefile := 'marzo.txt';
    4 : nomefile := 'aprile.txt';
    5 : nomefile := 'maggio.txt';
    6 : nomefile := 'giugno.txt';
    7 : nomefile := 'luglio.txt';
    8 : nomefile := 'agosto.txt';
    9 : nomefile := 'settembre.txt';
    10 : nomefile := 'ottobre.txt';
    11 : nomefile := 'novembre.txt';
    12 : nomefile := 'dicembre.txt';
  end;
  LeggiLista(lista,nomefile);
  risposta := 'S';
  while (risposta = 'S') or (risposta = 's') do
   begin
    writeln('digita cosa hai comprato : ');
    readln(R.bene);
    writeln('quanto hai speso (in EURO) ? ');
    readln(R.ammontare);
    writeln('che giorno e'' stato (gg) ? ');
    readln(R.data);
    writeln('Eventuale commento : ');
    readln(R.commento);
    InserisciCodaLista(lista, R);
    writeln('vuoi inserire un altro record (S/N)? ');
    readln(risposta);
   end;
   ScriviLista(nomefile, lista);
  writeln('la lista e'' stata salvata nel file ', nomefile, ' .' );
 end.

 10 caratteri il progr. deve aggiungere gli spazi rimanenti.
se e' questione di "paddare" la stinga con spazi basta
while length(s) < 10 do
 s := '<spazio>' + s;
{ oppure s := s + '<spazio>'; se vuoi un allineamento a sx }
p.s. occhio alle accentate, diventano illeggibili :-)
-- 
Dreadnaut
(Life would be easier if I had the source code)