PDA

View Full Version : Help java



Hador
31st October 2008, 12:24
mi serve un cristo di modo intelligente per leggere da file testo dalla posizione X alla posizione Y (in numeri di caratteri). C'è un modo più furbo piuttosto a fare un for carattere per carattere?
sto scrivendo una metrica per le line of code e mi sta tirando scemo

Alkabar
31st October 2008, 12:28
mi serve un cristo di modo intelligente per leggere da file testo dalla posizione X alla posizione Y (in numeri di caratteri). C'è un modo più furbo piuttosto a fare un for carattere per carattere?
sto scrivendo una metrica per le line of code e mi sta tirando scemo

Leggi tutte le linee (vuoi il codice ?), le metti in una stringa, hai concettualmente un vettore di caratteri, e poi li leggi da X a Y a seconda della posizione nel vettore.

Forse non capisco il problema.

Rayvaughan
31st October 2008, 12:28
tutte le righe le metti in array di caratteri? string.toCharArray()

bho

Darkwave
31st October 2008, 12:31
Io io voglio il codice che mi sto dilettando a imparare Java da poco e un po' di codice esempio non è mai male (tipo immagino sia sotto System qualcosa la lettura di un files, ma ha un miliardo di librerie sto Java).

Alkabar
31st October 2008, 12:32
Senza la gestione delle eccezioni, che viene in Eclipse automatica:

String everything = "";
BufferedReader in = new BufferedReader(new FileReader(fileName));

while ((line = in.readLine()) != null)
everything = everything + line + "\n"; /*non so se lo considera l'a capo eventualmente toglilo*/

Poi hai tutti i metodi della stringa su cui puoi vedere la lunghezza e tutto il resto come accederla da carattere x a carattere y.

Alkabar
31st October 2008, 20:54
Ce l'hai fatta Hador ?

Hador
3rd November 2008, 10:21
ho fatto carattere per carattere, devo contare le LOC di una classe e metodi attualmente abbiamo fatto così non so se mi convince, in caso la miglioriamo prossimamente. Il fatto è che bufferreader aveva già un metodo per contare le linee se fossi riuscito tramite filereader o inputstream a passargli una "porzione" di file avrei potuto usare quello, il fatto è che essendo metriche di classe se in un file java ho 2 classi non deve contarmi la somma ma le due metriche relative (usiamo visitor dell'ast di eclipse per fare ste robe).
fatto così, mi legge a vuoto fino alla posizione dove inizia la classe (che ricavo dai metodi dell'ast, è un visitor sto coso) e poi inizia a contare... è una porcata anche se il meglio delle porcate è come si trova il path del file - è un pugin di eclipse quindi la roba la mette nella cartella temporanea:

String path = Platform.getInstanceLocation().getURL().toString() + Utils.getPath(node).toString().substring(1);
path = path.substring(5); (perchè platform riporta il path nella forma file:/... quindi devo togliere il file:/)

fis = new FileInputStream(path);
inputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
for (int i = 0; i < node.getStartPosition(); i++) {
br.read();
for (int i = 0; i < node.getLength(); i++) {
char c = (char) br.read();
if (c == '\n')
value++;

forse con la stringa è più pulito, ma a complessità mi sa che vince il metodo de merda