Newsgroup: it.comp.lang.c
Titolo: aiuto creare un programma

salve a tutti volevo sapere se c'è qualcuno che mi può dare una mano per
creare un programmino stupido per avere questo risultato:
Da un file come questo
N3 X-165Y10R
N4 Z7F3000
N5 [ G881Z-50I-.4J.5K2F1500
N6 X-164.9992Y9.9955Z1.9525
N7 *2
N8 X-164.9991Y9.9955Z1.9520
N9 *1
N10 X-164.8336Y9.8287Z1.9484
N11 X-165.0553Y9.5172Z1.9416
N12 *2
N13 X-165.9084Y8.5934Z1.9482
N14 *1
N15 X-165.8255Y8.2852Z1.9453
N16 X-165.4925Y8.5010Z1.9424
N17 *2
N18 X-164.0177Y9.8923Z1.9435
N19 *1
N20 X-163.6448Y9.8312Z1.9427
tirare fuori un file come questo:
----------------------------------------------
open
arclength
 begin section !1
begin curve
1 0.000000 0.000000 0.000000
2 -165.000000 10.000000 0.000000
 begin section !2
begin curve
1 -165.000000 10.000000 0.000000
2 -165.000000 10.000000 7.000000
 begin section !3
begin curve
1 -165.000000 10.000000 7.000000
2 -164.999207 9.995500 1.952500
 begin section !4
begin curve
1 -164.999207 9.995500 1.952500
2 -164.999100 9.995500 1.952000
 begin section !5
begin curve
1 -164.999100 9.995500 1.952000
2 -164.833603 9.828700 1.948400
 begin section !6
begin curve
1 -164.833603 9.828700 1.948400
2 -165.055298 9.517200 1.941600
 begin section !7
begin curve
1 -165.055298 9.517200 1.941600
2 -165.908401 8.593400 1.948200
 begin section !8
begin curve
1 -165.908401 8.593400 1.948200
2 -165.825500 8.285200 1.945300
 begin section !9
begin curve
1 -165.825500 8.285200 1.945300
2 -165.492493 8.501000 1.942400
 begin section !10
begin curve
1 -165.492493 8.501000 1.942400
2 -164.017700 9.892300 1.943500
 begin section !11
begin curve
1 -164.017700 9.892300 1.943500
2 -163.644806 9.831200 1.942700
 begin section !12
begin curve
1 -163.644806 9.831200 1.942700
2 -163.871399 9.543100 1.938800
-------------------------------------------------------
il tutto deve girare su Nt4,il mio problema è che fin che si tratta di dieci
venti righe lo posso fare manualmente,quando il file e di 1 o 2 Mb la cosa
si complica allora ci vorrebbe un compilatore

 2 -165.000000 10.000000 0.000000
[...]
Io non ho capito cosa si deve fare. Si può rispiegare come funziona la
traduzione?
--
Alessandro Monti

si complica allora ci vorrebbe un compilatore
Pero', ammetterai, che scrivere un compilatore senza una grammatica e'
impossibile...dicci prima in che modo estrapolare i secondi dati dai
primi.
--
Andrea Laforgia
andrea_...@bigfoot.com

non saprei come spiegarlo, comunque provo a rispiegarlo
il file che ho, ha delle coordinate X Y Z ( FILE1 ) e mi serve convertirlo
come ( FILE2 )
se notate bene il file 2 deve incrementare il begin section in più su ogni
riga deve mettere la coordinata dell'ultima letta + quella nuova e via di
seguito spero di essere stato abbastanza chiaro grazie per l'aiuto
FILE 1
N1 X-165Y10R
N2 Z7F3000
N3 X-164.9992Y9.9955Z1.9525
N4 X-164.9991Y9.9955Z1.9520
N5 X-164.8336Y9.8287Z1.9484
N6 X-165.0553Y9.5172Z1.9416
--------------------------------------------------------------------
FILE2
open
arclength
 begin section !1
begin curve
1 0.000000 0.000000 0.000000
2 -165.000000 10.000000 0.000000
 begin section !2


N2 Z7F3000
Il problema nasce nel leggere queste due righe, che cosa significano ?
--
Andrea Laforgia
andrea_...@bigfoot.com

 se notate bene il file 2 deve incrementare il begin section in piů su ogni


 wrote in message
83amov$sd0$1...@bignews.shef.ac.uk...


ditemi voi cosa potrei fare e magari farmi un esempio
La cosa e' fattibilissima anche in C, non ci vuole poi molto.
L'importante, pero', e' sapere quale algoritmo di costruzione del file
sorgente c'e' alla base.
Per farti un esempio, ci devi dire una cosa del genere :
Ogni riga e' nel formato :
N<numero intero>X<numero double>Y<numero double>Z<numero double>
e allora costruire la trasformazione e' facile.
--
Andrea Laforgia
andrea_...@bigfoot.com

 spero di essere stato abbastanza chiaro grazie per l'aiuto
Mica tanto chiaro...come anche altri ti hanno già detto, ci dovresti
chiarire il formato delle prime due righe.
Comunque giusto per scrivere un po' di codice, ho buttato giù questo
semplice filtro (da prendere con le pinze ;)
------------------------------------------------------------------
#include <stdio.h>
#define START "\n begin section !%d\nbegin curve\n1 "
int main()
{
      char buffer[1024],
           last_line[1024] = "0.000000 0.000000 0.000000";
      while (fgets(buffer, sizeof buffer, stdin)) {
            int i;
            double x, y, z;
            sscanf(buffer, "N%d", &i);
            printf(START, i); puts(last_line);
            switch (i) {
            case 1:
                  sscanf(buffer, "N1 X%lfY%lfR", &x, &y);
                  sprintf(last_line, "%f %f %f", x, y, 0.0);
                  break;
            case 2:
                  sscanf(buffer, "N2 Z%lfF3000", &z);
                  sprintf(last_line, "%f %f %f", x, y, z);
                  break;
            default:
                  sscanf(buffer, "N%*d X%lfY%lfZ%lf", &x, &y, &z);
                  sprintf(last_line, "%f %f %f", x, y, z);
                  break;
            }
            fputs("2 ", stdout); puts(last_line);
      }
      return 0;
}
------------------------------------------------------------------
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

 semplice filtro (da prendere con le pinze ;)
CVD 8)
Posto una versione un po' più corretta (attenzione comunque ;)
------------------------------------------------------------------
include <stdio.h>
#define START "\n begin section !%d\nbegin curve\n1 %f %f %f\n2 "
int main()
{
      char buffer[1024];
      double x = 0.0, y = 0.0, z = 0.0;
      while (fgets(buffer, sizeof buffer, stdin)) {
            int i;
            sscanf(buffer, "N%d", &i);
            printf(START, i, x, y, z);
            switch (i) {
            case 1:
                  sscanf(buffer, "N1 X%lfY%lfR", &x, &y);
                  break;
            case 2:
                  sscanf(buffer, "N2 Z%lfF3000", &z);
                  break;
            default:
                  sscanf(buffer, "N%*d X%lfY%lfZ%lf", &x, &y, &z);
                  break;
            }
            printf("%f %f %f\n", x, y, z);
