Newsgroup: it.comp.lang.delphi
Titolo: Aiuto ho bisogno di Voi!

Ciao a tutti
il mio problema è questo:
Ho un file txt composto come da esempio
 Y2.5800
 Z0.0000
G01 Z-0.0911
 X4.8300
 X4.7600
 X4.7460 Z-0.2023
Ore il mio problema e leggere i numeri che trovo dopo La X la Y e la Z e
sostituirli con il valore trovato moltiplicato x 25.4.
Esempio
 Y65.532
 Z0.0000
G01 Z-2.31394
 X122.682
 X120.904
 X120.5484 Z-5.13842
Chi mi da una mano?
Ciao Gianluca

  X4.7460 Z-0.2023
la riga potrebbe anche contenere piů numeri oppure hai dimenticato un Invio?
Se ogni riga contiene un solo numero, la procedura qui sotto va bene, altrimenti
dimmelo che la adattiamo.
-------------
procedure Dividi(s: String; var sPrefisso: String; var dNumero: Extended);
var
  i: Integer;
begin
  for i := 1 to Length(s) do
  begin
    if (s[i] in ['X', 'Y', 'Z']) then
    begin
      sPrefisso := Copy(s, 1, i);
      Break;
    end;
  end;
  dNumero := StrToFloat(Copy(s, i + 1, Length(s) - 1));
end;
procedure TForm1.FormCreate(Sender: TObject);
var
  slFile: TStringList;
  i: Integer;
  dNumero: Extended;
  sPrefisso: String;
begin
  DecimalSeparator := '.';
  slFile := TStringList.Create;
  try
    slFile.LoadFromFile('c:\prova.txt');
    for i := 0 to slFile.Count - 1 do
    begin
      Dividi(slFile[i], sPrefisso, dNumero);
      slFile[i] := Format('%s%.5f', [sPrefisso, dNumero * 25.4]);
    end;
    finally
    begin
      slFile.SaveToFile('c:\prova2.txt');
      slFile.Free;
    end;
  end;
end;
--
Jax

 dimmelo che la adattiamo.
Prima di tutto grazie,
no non č un errore su una riga ci possono essere piů numeri
Ciao
Gianluca

 no non è un errore su una riga ci possono essere più numeri
Uh, cazzarola... allora bisogna riscriverla un pochino :(
Io oggi non posso e nemmeno domani... vediamo se qualcuno di buona volontà si
inserisce e modifica il mio codice (un open source su usenet... LOL)
Ciao!
--
Jax

  X4.7460 Z-0.2023
Ciao... piccola curiosita'...
Per caso... si tratta di un file da dare in pasto ad una macchina che 
esegue dei tagli con laser (o punte)? Mi pare di aver gia' fatto un lavoro 
del genere, in passato: si trattava di convertire i comandi L310 e L21 in 
M10 e M11 e cose simili.
Ciao!
Davide DG.
-- 
La resistenza e' inutile! Preparatevi ad essere disassemblati !

 usenet... LOL) 
Dunque... per funzionare funziona... solo che ... non fa nessun tipo di 
controllo, e poi e' solo una "patch" alla soluzione proposta da Jax
procedure Dividi(s: String; var sPrefisso: String; var dNumero: Extended);
var
  i: Integer;
begin
  for i := 1 to Length(s) do
  begin
    if (s[i] in ['X', 'Y', 'Z']) then
    begin
      sPrefisso := Copy(s, 1, i);
      Break;
    end;
  end;
  dNumero := StrToFloat(Copy(s, i + 1, Length(s) - 1));
end;
Function Tokens ( s : string ) : Integer;
var i : integer;
Begin
  Result := 0;
  for i := 1 to Length(s) do
    if (s[i] in ['X', 'Y', 'Z']) then
      inc(result);
End;
Function GetToken (s : string; n : integer) : string;
var i, tk, last_tk_i, last_tk_end, delim : integer;
var st : string;
begin
  tk := 0;
  last_tk_end := 1;
  for i := 1 to Length(s) do  begin
    if (s[i] in ['X', 'Y', 'Z']) then begin
      inc (tk);
      if tk <> n then begin
        last_tk_i := i;
        last_tk_end := Pos (' ', copy (s, last_tk_i, length(s)));
      end else begin
        st := copy (s, last_tk_end, length(s));
        delim := Pos (' ', copy(s, i, length(s)));
        if delim <= 1 then delim := length(st);
        result := copy (st, 1, delim);
        break;
      end;
    end;
  end;
End;
procedure TForm1.FormCreate(Sender: TObject);
var
  slFile: TStringList;
  i,j : Integer;
  dNumero: Extended;
  sPrefisso: String;
  s, sj, ns : string;
Begin
  DecimalSeparator := '.';
  slFile := TStringList.Create;
  try
    slFile.LoadFromFile('c:\prova.txt');
    for i := 0 to slFile.Count - 1 do begin
      s := slFile[i];
      ns := '';
      for j := 1 to tokens (s) do begin
        sj := gettoken (s, j);
        Dividi (sj, sPrefisso, dNumero);
        sj := Format('%s%.5f', [sPrefisso, dNumero * 25.4]);
        ns := ns + ' ' + sj;
      end;
      ns := Trim(ns); 
      slFile[i] := ns;
    end;
  finally
    slFile.SaveToFile('c:\prova2.txt');
    slFile.Free;
  end;
End;
Ciao,


Davide,
la mamma non ti ha spiegato che la notte è fatta per dormire? :-)
--
- Carlo -
cbertu81(at)libero(dot)it

> Per caso... si tratta di un file da dare in pasto ad una macchina che
....
CENTRO!
Gianluca

 la mamma non ti ha spiegato che la notte Š fatta per dormire? :-)
Si', ma solo se ti devi alzare presto per andare a lavorare!!! ;-PPP
uaz uaz!
Davide DG.
-- 
Ascolta il tuo cuore. Esso conosce tutte le cose. (Paulo Coelho)