Newsgroup: it.comp.java
Titolo: String Tokenizer e files

Qualcuno conosce bene l'uso di stringtokenizer?
Dovrei memorizzare in array un files di questo tipo:
01121230 010111
0101011   0156015
0150015   0415604
qq
01560156 0156065
01501556 04045645
rr
sentinella
01560166 06556566
ho messo qq o rr per indicare la fine di una parte di input e la
memorizzazione in un'altro array ma mi da errore e si blocca sempre !
Qualcuno di voi ha qualche esempio di ciclo di lettura di questio tipo?
Dal momento che l'array è int non vorrei che il prog si bloccasse perche
non converte qq in int???
Grazie...e AIUTO
ps: Fabrizio! dove sei?
Ciao.
Do



il codice potrei anche scriverlo ma non e' meglio 
se spedisci il tuo cosi' vediamo dove sbagli?
ciao_O
_______________________________________
http://jame.sourceforge.net
 
[ last release jame4.2e ]
_______________________________________
http://digilander.iol.it/schiele

 ciao_O
Questo è il frammento di codice, ho provato in tutti i modi ma mi dà gli
errori che elenco in seguito nel frammento di programma. forse devo inserire
il secondo do while nel primo?
Devo necessariamente risolvere il problema altrimenti non posso consegnare
il programma per l'esame!
Grazie.
Do
LISTATO:
{ConsoleReader console = new ConsoleReader (System.in);
    boolean done=false;
    while(!done)
    {
      String linea = console.readLine();
      if (linea==null)  done=true;
      else
      {StringTokenizer tokenizer = new StringTokenizer (linea);
       while(tokenizer.hasMoreTokens ())
        do{
       xRM=x; //aggiorno i riferimenti agli array
       yRM=y;
         if(xsize<x.length && ysize<y.length)
      {x[xsize]= Double.parseDouble(tokenizer.nextToken());
    xsize++;
    y[ysize]= Double.parseDouble(tokenizer.nextToken());
    ysize++;}
  else
  {double [] BigX = new double [3*x.length];
   double [] BigY = new double [3*y.length];
         System.arraycopy ( x,0,BigX, 0, x.length);
   x=BigX;
      System.arraycopy ( y,0,BigY, 0, y.length);
   y=BigY;}
  }//do while
    while (linea.equalsIgnoreCase("Roma")) ;
      do{
       xLT=x;/* aggiono riferimento all'array per memorizzare in un
sec array*/
       yLT=y;
         if(xsize<x.length && ysize<y.length)
      {x[xsize]= Double.parseDouble(tokenizer.nextToken());
    xsize++;
    y[ysize]= Double.parseDouble(tokenizer.nextToken());
    ysize++;}
  else
  {double [] BigX = new double [3*x.length];
   double [] BigY = new double [3*y.length];
         System.arraycopy ( x,0,BigX, 0, x.length);
   x=BigX;
      System.arraycopy ( y,0,BigY, 0, y.length);
   y=BigY;}
  }//do while
    while (linea.equalsIgnoreCase("Latina")) ;
 }//while token       }//tokenizer
          }//while done   }//consolereader
        }
Errori che compaiono dopo la compilazione :
Microsoft Windows 2000 [Versione 5.00.2195]
(C) Copyright 1985-1999 Microsoft Corp.
C:\>cd myprojects
C:\MyProjects>cd lazio
C:\MyProjects\Lazio>java leggoMemorizzo < romalt.txt
Exception in thread "main" java.util.NoSuchElementExce
        at java.util.StringTokenizer.nextToken(Unknown
        at LazioPanel.<init>(leggoMemorizzo.java:99)
        at LazioFrame.<init>(leggoMemorizzo.java:35)
        at leggoMemorizzo.main(leggoMemorizzo.java:19)

        at leggoMemorizzo.main(leggoMemorizzo.java:19)
ho deciso di riscrivere tutto ;)
nel tuo codice i loop erano sbagliati, il primo while 
conteneva il primo do ma non il secondo 
{
	ConsoleReader console = new ConsoleReader(System.in);
	Vector vx = new Vector();
	Vector vy = new Vector();
 
	String linea = null;
	xRM = null;
	yRM = null;
	xLT = null;
	yLT = null;
 
	try
	{
		while (((linea = console.readLine()) != null) && (!linea.equalsIgnoreCase("Roma")))
		{
			StringTokenizer tokenizer = new StringTokenizer(linea);
 
			vx.addElement(new Double(tokenizer.nextToken()));
			vy.addElement(new Double(tokenizer.nextToken()));
		}
 
		if (vx.size() > 0)
		{
			xRM = new double[vx.size()];
 
			for (int i = 0; i < xRM.length; i++)
			{
				xRM[i] = ((Double)vx.elementAt(i)).doubleValue();
			}
		}
 
		if (vy.size() > 0)
		{
			yRM = new double[vy.size()];
 
			for (int i = 0; i < yRM.length; i++)
			{
				yRM[i] = ((Double)vy.elementAt(i)).doubleValue();
			}
		}
 
		vx.removeAllElements();
		vy.removeAllElements();
 
	while (((linea = console.readLine()) != null) && (!linea.equalsIgnoreCase("Latina")))
		{
			StringTokenizer tokenizer = new StringTokenizer(linea);
 
			vx.addElement(new Double(tokenizer.nextToken()));
			vy.addElement(new Double(tokenizer.nextToken()));
		}
 
		if (vx.size() > 0)
		{
			xLT = new double[vx.size()];
 
			for (int i = 0; i < xLT.length; i++)
			{
				xLT[i] = ((Double)vx.elementAt(i)).doubleValue();
			}
		}
 
		if (vy.size() > 0)
		{
			yLT = new double[vy.size()];
 
			for (int i = 0; i < yLT.length; i++)
			{
				yLT[i] = ((Double)vy.elementAt(i)).doubleValue();
			}
		}
		vx.removeAllElements();
		vy.removeAllElements();		
	}
	catch (Exception e)
	{
		System.out.println("il contenuto del file non e' corretto!");
	}	
}
ciao_O
PS:
il codice non l'ho provato ;)


 ha scritto nel
messaggio news:3be427e1...@news.tiscalinet.it...

Il problema č il vettore! non abbiamo mai usato vettori e non sono in
programma!
Il codice che ti ho inviato secondo te va bene con opportune correzioni?
perchč lo compila e poi mi da l'errore quando lo eseguo??????
Grazie di tutto comunque e della pronta risposta
Do

perchč lo compila e poi mi da l'errore quando lo eseguo??????
usi i cilci in maniera errata
while(tokenizer.hasMoreTokens ())
do
while()
do 
while()
qual'e' il contenuto del ciclo while?
ciao_O


 ciao_O
Ho provato a inserire il frammento di programma nel programma completo ma
stampa sei volte "il contenuto del programma non č corretto". lancia
l'eccezione! Ho sbagliato qualcosa?
Per l'uso dei vettori, il tutto č motivato dall'assenza nel programma di
esame dei vettori, quindi un eventuale uso nel progetto deve essere motivato
, non era una critica. inserisco il programma completo cosě vedi i miei
errori ( o orrori ). e i files di testo necessari per la compilazione e
disegno ( anche in email) .
Grazie di tutto , capirai che sono in crisi e l'esame č vicino!
Do
  import javax.swing.JFrame;
  import javax.swing.JPanel;
  import java.awt.Graphics;
  import java.awt.Graphics2D;
  import java.awt.Container;
  import java.util.StringTokenizer;
  import java.util.Arrays;
  import java.util.Vector;
  import java.awt.Polygon;
  import java.awt.geom.AffineTransform;
  import java.awt.geom.Rectangle2D;
  import java.awt.Color;
  import java.awt.event.WindowAdapter;
  import java.awt.event.WindowEvent;
 public class leggoMemorizzo2
   {public static void main (String[]args )
 {LazioFrame frame = new LazioFrame ();
 frame.setTitle(" PROVINCIA DI FROSINONE");
 frame.show();
              }
 }
 class LazioFrame extends JFrame
 {public LazioFrame ()
    {final int FRAME_WIDTH=800;
  final int FRAME_HEIGHT=600;
  setSize(FRAME_WIDTH,FRAME_HEIGHT);
 WindowCloser listener= new WindowCloser();
 addWindowListener(listener);
 //costruisco i componenti
 panel =new LazioPanel();
 //costruisco riferimento a lastra contenuti
 Container contentPane= getContentPane();
 contentPane.add(panel, "Center");
  }
 private LazioPanel panel;
 private class WindowCloser extends WindowAdapter
   {public void windowClosing(WindowEvent event)
    {System.exit(0); }
  } }
 class LazioPanel extends JPanel
  { final int X_LENGHT = 1500;
    final int Y_LENGHT = 1500;
    double []x= new double[X_LENGHT];
    double []y= new double[Y_LENGHT];
    double []xRM= new double[X_LENGHT];
    double []yRM= new double[Y_LENGHT];
    double []xLT= new double[X_LENGHT];
    double []yLT= new double[Y_LENGHT];
    int xRMsize =0;
    int yRMsize=0;
    int xLTsize =0;
    int yLTsize=0;
    int xsize =0;
    int ysize=0;
    {ConsoleReader console = new ConsoleReader (System.in);
    boolean done=false;
    while(!done)
    {
      String linea = console.readLine();
      if (linea==null)  done=true;
      else
      {
  Vector vx = new Vector();
  Vector vy = new Vector();
   linea = null;


  vx.addElement(new Double(tokenizer.nextToken()));
  vy.addElement(new Double(tokenizer.nextToken()));
  }




  vx.removeAllElements();
  vy.removeAllElements();

   vx.addElement(new Double(tokenizer.nextToken()));
   vy.addElement(new Double(tokenizer.nextToken()));
   }





         } //while done
        }//consolereader
        public void paintComponent(Graphics g)
     { super.paintComponent(g);
      Graphics2D g2= (Graphics2D)g;
            int[] xdraw=new int[xLTsize];
        for(int i=0; i<xLTsize; i++)
        xdraw[i]=(int)Math.round(xLT[i]);
        int[] ydraw=new int[yLTsize];
        for (int j=0; j<yLTsize; j++)
        ydraw[j]=(int)Math.round(yLT[j]);
        Polygon Frosinone= new Polygon(xdraw, ydraw,xsize) ;
        Rectangle2D box = Frosinone.getBounds2D();
        AffineTransform b = new AffineTransform(1, 0.0,
0.0,-1,0.0,614.50091 );
        AffineTransform a = new AffineTransform(0.008346897, 0.0, 0.0,
0.008346897,-6914.99516783,-38281.55499 );
        b.concatenate(a);
        g2.transform(b);
        g2.setColor(Color.gray);
        g2.fill(Frosinone);
        g2.draw(Frosinone);
           }
             }

ps: Fabrizio! dove sei?
Ci sono, ho letto, ma non ho avuto tempo per rispondere. :-)
Se volete "confondervi" le idee, andate a vedere l'esempio che trovate
in
/demo/applets/Wireframe nella cartella del jdk (forse c:\jdk1.3.1 ?)
in particolare il costruttore della classe Model3D nel file
ThreeD.java.
A presto.
-- 
Ciao
	Fabrizio C.

0.008346897,-6914.99516783,-38281.55499 );
Accidenti, ma lo fate apposta? Da dove escono i numeri?
Capisco che possa funzionare, ma che senso ha?
Immagino che avrete fatto "a mano" dei calcoli, ma perché non farli
fare "pari pari" al programma (rendendolo così un po' più utile)?
E' come se scriveste un programma che formatta carrettamente il testo
SOLO se questo testo è il "5 Maggio".
Il professore ve lo ha già approvato?!?
Segue la classe (scusate la lunghezza delle righe):
import java.util.*;
import java.io.*;
import java.awt.*;
import java.awt.geom.*;
public class LoadCoord {
  private final int LENGTH = 500;
  // quanti ne servono?
  private Polygon Roma;
  private Polygon Rieti;
  public static void main(String[] args) {
    LoadCoord lc = new LoadCoord();
    lc.load("class/coord.txt");
    lc.debugPrint();
  }
  public Polygon[] getPolygons() {
    return new Polygon[]{Roma, Rieti};
  }
  public void load(String fileName) {
    double[] x = new double[LENGTH];
    double[] y = new double[LENGTH];
    String prov = "";
    int index = 0;
    StringTokenizer tokenizer;
    try {
      BufferedReader br = new BufferedReader(new FileReader(fileName));
      String line = null;
      while ((line = br.readLine()) != null) {
        if (lineaVuota(line)) {
          // in questo caso passo oltre
        } else if (nuovaEtichetta(line)) {
          //cambio contesto
          creaProvincia(prov, x, y, index);
          //e ricomincio
          index = 0;
          prov = line.trim();
        } else if (nuovoPunto(line)) {
          tokenizer = new StringTokenizer(line);
          if (tokenizer.countTokens() == 2) {
            if (index >= x.length) {
              double[] BigX = new double[3 * x.length];
              //copio tutti gli elementi da x a BigX
              System.arraycopy(x, 0, BigX, 0, x.length);
              x = BigX;
              double[] BigY = new double[3 * y.length];
              //copio tutti gli elementi da y a BigY
              System.arraycopy(y, 0, BigY, 0, y.length);
              y = BigY;
            }
            x[index] = Double.parseDouble(tokenizer.nextToken());
            y[index] = Double.parseDouble(tokenizer.nextToken());
            index++;
          } else {
            System.out.println("Errore nel formato dei dati?");
          }
        } else {
          //cosa altro puù succedere?
        }
      }
      creaProvincia(prov, x, y, index);
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  private boolean lineaVuota(String line) {
    return ("".equals(line.trim()));
  }
  private boolean nuovoPunto(String line) {
    return Character.isDigit(line.trim().charAt(0));
  }
  private boolean nuovaEtichetta(String line) {
    // qui bisogna aggiustare (sigh!) a seconda dei dati
    if ("Roma".equals(line) || "Rieti".equals(line)) {
      return true;
    }
    return false;
  }
  private void creaProvincia(String prov, double[] xArray, double[] yArray, int num) {
    // peccato buttare via i decimali :-(
    int[] x = new int[num];
    for (int i = 0; i < x.length; i++) {
      x[i] = (int)xArray[i];
    }
    int[] y = new int[num];
    for (int i = 0; i < y.length; i++) {
      y[i] = (int)yArray[i];
    }
    Polygon dummy = new Polygon(x, y, num);
    // fa rabbrividire, ma...
    if ("Roma".equals(prov)) {
      Roma = dummy;
    }
    if ("Rieti".equals(prov)) {
      Rieti = dummy;
    }
  }
  private void debugPrint() {
    printCoord(Roma);
    printCoord(Rieti);
  }
  private void printCoord(Shape s) {
    PathIterator pi = s.getPathIterator(null);
    int type;
    double[] coord = new double[6];
    while (!pi.isDone()) {
      type = pi.currentSegment(coord);
      switch (type) {
        case PathIterator.SEG_MOVETO:
          System.out.print("moveTo ");
          System.out.println("(" + coord[0] + "; " + coord[1] + ")");
          break;
        case PathIterator.SEG_LINETO:
          System.out.print("lineTo ");
          System.out.println("(" + coord[0] + "; " + coord[1] + ")");
          break;
        case PathIterator.SEG_QUADTO:
          System.out.print("quadTo ");
          System.out.print("(" + coord[0] + "; " + coord[1] + "), ");
          System.out.println("(" + coord[2] + "; " + coord[3] + ")");
          break;
        case PathIterator.SEG_CUBICTO:
          System.out.print("cubicTo ");
          System.out.print("(" + coord[0] + "; " + coord[1] + "), ");
          System.out.print("(" + coord[2] + "; " + coord[3] + "), ");
          System.out.println("(" + coord[5] + "; " + coord[5] + ")");
          ;
          break;
        case PathIterator.SEG_CLOSE:
          System.out.println("close");
          break;
      }
      pi.next();
    }
  }
}
HTH
-- 
Ciao
	Fabrizio C.