Newsgroup: it.comp.java
Titolo: Lo spazio è un carattere??...aiuto...

Salve ragazzi,
ho un grosso problema. Ho realizzato un programmino java che dovrebbe,
ricevuto in ingresso un file txt "tabellare" (cioè fatto così
dato dato dato....
dato dato dato...
con gli spazi che separano le colonne, calcolare numero di righe e
colonne di quest'ultimo.
Per le righe ci sono riuscito, per le colonne il programma gira ma non
me le calcola correttamente, anzi rimane sempre al valore inizializzato
(0). Qualcuno può aiutarmi?
Il problema penso sia concettuale, io ho fatto un ciclo for che legge
la stringa creatami da readLine e conta il numero di spazi (che è
uguale al numero di colonne). Cosa sbaglio?
Ecco il codice, grazie per l'aiuto.
import java.util.*;
import java.io.*;
public class addtodb {
/**
* @param args
*/
  public static int fileLenght(File f)throws IOException {
    BufferedReader in=null;
    String line;
    int i=0;
    char ch;  // il generico carattere della stringa
    int ColNum=0;
    try{
     FileReader fr=new FileReader(f);
     in=new BufferedReader(fr);
    }
    catch(IOException e){
      System.out.println( e.getMessage());
    }
    line=in.readLine();
    for(int j = 0; j < line.length(); j++){
      ch = line.charAt(j);
      if(ch=='') ColNum++;                  //come metto lo spazio?
    }
    System.out.println("Il numero di colonne e' :"+ColNum);
    while(line!=null) { //è la condizione di terminazione del file
      i++;
      line=in.readLine();
    }
    in.close();
    return i;
  }
  public static void main(String[] args)throws IOException {
    File f;
    f=new File("dati.txt");
    try{
      System.out.println(fileLenght(f));
    }
    catch(IOException e){
    System.out.println(e.getMessage());
    }
  }
}

gbattine ha scritto:
if(ch=='') ColNum++;                  //come metto lo spazio?
Stai facendo un test con un carattere vuoto, non con uno spazio. Se 
invece vuoi tokenizzare una stringa, quindi conoscere le parole di cui č 
composta e il loro numero, prova cosě:
String ar[] = "devo tokenizzare questa stringa".split("\\s");
for(int k=0; k<ar.length; k++){
     System.out.println(ar[k]);}
ar.length č il numero di parole.

Ho capito la spiegazione ma non come farlo nel mio caso:
Io ho una stringa chiamata line che rappresenta la stringa che
rappresenta tutta la prima riga del file.
Come la tokenizzo?
Puoi aiutarmi col codice?
Grazie

 dato dato dato...
Usa StringTokenizer per spezzare la riga 
(
http://java.sun.com/j2se/1.4.2/docs/api/java/util/StringTokenizer.html
)
   int lines = 0;
   int colonne = 0;
   FileReader file = new FileReader(new File(...));
   BufferedReader br = new BufferedReader(file);
   String line = br.readLine();
   while (line != null) {
     lines++
     StringTokenizer st = new StringTokenizer(line);
     System.out.println("Il numero di colonne e' :" + st.countTokens());
     line = br.readLine();
   }
   System.out.println("Il numero di righe e' :" + lines);
In alternativa a StringTokenizer, puoi usare String.split("\\s") che 
supporta le regexp 
(
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#split(java.lang.String)
)
-- 
Giambo - Occhio al filtro antispam _e_ alla whitelist !

 (
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#split(java.lang.String)
) 
Che è guardacaso l'esempio che ho postato io. StringTokenizer è deprecato.

 Puoi aiutarmi col codice?
Evidentemente non leggi le risposte:ti ho postato un esempio!

     }
(ch == ' ') come metti lo spazio? con uno spazio ovviamente!!!!
Comunque usa String.split()

 StringTokenizer è deprecato.
Un riferimento ?
--
Marco
*** Posted via a free Usenet account from 
http://www.teranews.com
 ***



Ho controllato nella documentazione del jdk 1.5 e 1.6 , mi sembra tutto
tranne che deprecato...
-- 
Fermiamo Scientology prima che sia troppo tardi!!!
http://xenu.com-it.net
 - 
http://xenu.freewinds.cx/
 - 
http://www.xenu.net/
(per rispondere personalmente leva IlDitoDalCulo)

 tranne che deprecato...
" StringTokenizer is a legacy class that is retained for compatibility 
reasons although its use is discouraged in new code. It is recommended 
that anyone seeking this functionality use the split  method of String 
or the java.util.regex package instead.
The following example illustrates how the String.split method can be 
used to break up a string into its basic tokens:
          String[] result = "this is a test".split("\\s");
          for (int x=0; x<result.length; x++)
              System.out.println(result[x]);
"
fonte: 
http://java.sun.com/j2se/1.5.0/docs/api/index.html
E deve esserlo sin dai tempi di j2sdk 1.4.2, poichè già nella 
documentazione era presente questo avviso.

 fonte: 
http://java.sun.com/j2se/1.5.0/docs/api/index.html
Perdonatemi, il frame mi ha indotto in errore. Il link corretto č:
http://java.sun.com/j2se/1.5.0/docs/api/java/util/StringTokenizer.html
Tra l'altro, senza offesa per gli affezionati, ma mi sembra che split 
sia molto piů pratico.

 sia molto più pratico.
Se esamino un token alla volta e non voglio avere un array contenente
potenzialmente migliaia di riferimenti preferisco StringTokenizer.


 potenzialmente migliaia di riferimenti preferisco StringTokenizer.
Avrebbe senso se conoscessimo l'implementazione interna di 
StringTokenizer. Tra l'altro se la sun raccomanda di non utilizzarlo, 
non puoi non fidarti, visto che in fondo l'hanno scritto loro... Senza 
polemiche, intendiamoci.

Manuel T wrote:

D'oh ! Ecco cosa succede a lavorare per un cliente che vuole usare 
ancora le 1.3: Facilmente si perde il treno :( ...
