Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Settare il separatore delle colonne txt file

    Buongiorno a tutti,

    sono nuova su questo forum e spero di trovare un aiuto per alcuni dettagli in quanto sto studiando Java e non ho molta esperienza.

    Ho scritto un metodo che legge un file txt e importa i dati in un array

    codice:
    public void importToArray(){ int rows = 0; bin = new String[numberOfLines()][6]; try { FileReader fr = new FileReader(fileToImport); BufferedReader br = new BufferedReader(fr); String line = null; while((line = br.readLine())!= null){ StringTokenizer stk = new StringTokenizer(line, ","); while(stk.hasMoreTokens()){ for (int cls = 0;cls<6; cls++){ bin[rows][cls]= stk.nextToken(); } rows++; }//end inner while loop }//end outer while loop br.close(); }//end try catch(Exception e){ System.out.println(e); } }
    In questo code ho messo come separatore di colonne la virgola
    StringTokenizer stk = new StringTokenizer(line, ",");

    Ho quindi creato una GUI dove posso selezionare diversi tipi di separatori (comma, semi-colon, space o tab) a seconda dei file di testo che vorrei importare, che allego nell'immagine. I radio button sono abbinati ad un button group in modo che solo uno dei 4 radio button sia attivo.

    Quello che vi chiedo è un aiuto su come devo modificare il mio metodo per far sì che riconosca come separatore delle colonne quello che scelgo nella GUI.

    Grazie.

    Susanna

  2. #2

    Re: Settare il separatore delle colonne txt file

    Originariamente inviato da susieferrari
    Quello che vi chiedo è un aiuto su come devo modificare il mio metodo per far sì che riconosca come separatore delle colonne quello che scelgo nella GUI.
    Devi parametrizzare il metodo importToArray e quindi, nel suo corpo, vai sostituire le costanti con il parametro che definisci per tale metodo.

  3. #3

    Re: Re: Settare il separatore delle colonne txt file

    Originariamente inviato da VincenzoTheBest
    Devi parametrizzare il metodo importToArray e quindi, nel suo corpo, vai sostituire le costanti con il parametro che definisci per tale metodo.
    Ciao,

    ho cambiato il code creando un campo String radioColumnSelect = null; e poi ho messo un if else

    codice:
    public void importToArray(){ int rows = 0; bin = new String[numberOfLines()][6]; try { FileReader fr = new FileReader(fileToImport); BufferedReader br = new BufferedReader(fr); String line = null; String radioColumnSelect = null; if (jCommaRadioButton.isSelected()){ radioColumnSelect =","; } else if (jSemiColonRadioButton.isSelected()){ radioColumnSelect =";"; } else if (jTabRadioButton.isSelected()){ radioColumnSelect ="\t"; } else if (jSpaceRadioButton.isSelected()){ radioColumnSelect =" "; } while((line = br.readLine())!= null){ StringTokenizer stk = new StringTokenizer(line, radioColumnSelect); while(stk.hasMoreTokens()){ for (int cls = 0;cls<6; cls++){ bin[rows][cls]= stk.nextToken(); } rows++; }//end inner while loop }//end outer while loop br.close(); }//end try catch(Exception e){ System.out.println(e); } }
    Il problema è che tutti i RadioButton sono dichiarati come private nella classe del main, e in questa classe mi ritorna errore in quanto mi dice che non trova le variabili, cioè i RadioButton

    Come posso risolvere questo problema?

    Grazie

    Susanna

  4. #4

    Re: Re: Re: Settare il separatore delle colonne txt file

    Originariamente inviato da susieferrari
    Il problema è che tutti i RadioButton sono dichiarati come private nella classe del main, e in questa classe mi ritorna errore in quanto mi dice che non trova le variabili, cioè i RadioButton
    Posta un po' la classe ed indenta bene il suo codice per favore.

  5. #5
    Questa è la classe dove ho il main

    codice:
    package mySplitProva; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import java.io.File; import javax.swing.JFileChooser; import javax.swing.filechooser.FileFilter; import java.io.*; public class SplitJFrame extends javax.swing.JFrame { /** Creates new form SplitJFrame */ public SplitJFrame() { initComponents(); jSplitPane1.setOneTouchExpandable(true); } @SuppressWarnings("unchecked") private void jFileReaderActionPerformed(java.awt.event.ActionEvent evt) { JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileFilter(new TxtFileFilter()); int returnVal = fileChooser.showOpenDialog(this); if(returnVal == JFileChooser.APPROVE_OPTION){ File myFile = fileChooser.getSelectedFile(); FileImport obj1 = new FileImport(myFile); jTotalRowsTextField.setText(String.valueOf(obj1.numberOfLines())); System.out.println(obj1.checkIsFile()); System.out.println(obj1.numberOfLines()); obj1.importToArray(); obj1.printArray(); System.out.println("--------------------------------------"); obj1.buildDataArray(obj1.getArray()); obj1.printDataArray(); } } private class TxtFileFilter extends FileFilter{ public boolean accept(File file){ if(file.isDirectory()) return true; String fname = file.getName(); return fname.endsWith("txt"); } public String getDescription(){ return "txt file"; } } public static void main(String args[]) { try{ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch(UnsupportedLookAndFeelException e){ //handle exception } catch(ClassNotFoundException e){ //handle exception } catch(InstantiationException e){ //handle exception } catch(IllegalAccessException e){ //handle exception } java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new SplitJFrame().setVisible(true); } }); }
    Mentre questa è la classe dove ho i metodi


    codice:
    package mySplitProva; import java.io.*; //import java.util.StringTokenizer; import java.util.*; import java.text.SimpleDateFormat; public class FileImport { private File fileToImport; private Date[] dateArray; private double[][] dataArray; public FileImport(File myFile) { fileToImport = myFile; dateArray = new Date[numberOfLines()];//Array for date(calendar) dataArray = new double[numberOfLines()][6];//Array for double data }//constructor for fileToImport field int lines = 0; String[][]bin; public boolean checkIsFile(){ return fileToImport.isFile(); } public int numberOfLines(){ lines = 0; if(checkIsFile()){ try{ FileReader fr = new FileReader(fileToImport); BufferedReader br = new BufferedReader(fr); while((br.readLine()!=null)){ lines++; }//end while loop br.close(); }catch(Exception e){ System.out.println(e); } } else{ System.out.println("There is no file to import"); } return lines; }//returns number of lines in a txt file public void importToArray(){ int rows = 0; bin = new String[numberOfLines()][6]; try { FileReader fr = new FileReader(fileToImport); BufferedReader br = new BufferedReader(fr); String line = null; while((line = br.readLine())!= null){ StringTokenizer stk = new StringTokenizer(line, ","); while(stk.hasMoreTokens()){ for (int cls = 0;cls<6; cls++){ bin[rows][cls]= stk.nextToken(); } rows++; }//end inner while loop }//end outer while loop br.close(); }//end try catch(Exception e){ System.out.println(e); } }//import data to bin array public void printArray(){ for(int i =0;i<bin.length; i++){ System.out.printf("%s ", i); for(int j =0;j<bin[i].length; j++){ System.out.printf("%s ", bin[i][j]); } System.out.println(""); }//end for loop }//print contents of bin array public String[][] getArray(){ return bin; }//return bin array public void buildDateArray(String[][]d) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");//set date format here; for(int i=0;i<d.length; i++){ for(int j = 0;j<d[i].length; j++){ if(j==0){ try{ Date newDate = (Date)sdf.parse(d[i][0]);//parse first column to Date dateArray[i] = newDate; }//end try catch(Exception e){ System.out.println(e); }//end catch } } }//end for loops } public void buildDataArray(String[][]d){ for(int i=0;i<d.length;i++){ for(int j=0;j<d[i].length; j++){ switch(j){ case 0: dataArray[i][j]=0; break; case 1: dataArray[i][j]=new Double(d[i][j]); break; case 2: dataArray[i][j]=new Double(d[i][j]); break; case 3: dataArray[i][j]=new Double(d[i][j]); break; case 4: dataArray[i][j]=new Double(d[i][j]); break; case 5: dataArray[i][j]=new Double(d[i][j]); break; }//end switch } }//end for loops } public void printDataArray(){ for(int i=0;i<dataArray.length;i++){ for(int j=0;j<dataArray[i].length;j++){ System.out.printf("%s ", dataArray[i][j]); } System.out.println(""); } } public void printDateArray(){ for(int i=0;i<dateArray.length;i++){ System.out.println(dateArray[i]); } } }
    Potrebbe essere una soluzione quella di abbinare un listener differente ad ogni RadioButton?

    Grazie

    Susanna

    PS spero che l'indentazione sia venuta correttamente questa volta...
    PS2 evidentemente sbaglio qualcosa perchè nonostante uso CODE per inserire il codice e chiudo il tag, mi stampa tutto su una riga.

  6. #6
    Originariamente inviato da susieferrari
    Potrebbe essere una soluzione quella di abbinare un listener differente ad ogni RadioButton?
    Si può andare, anche se potresti associarne anche uno solo.

    Originariamente inviato da susieferrari
    PS spero che l'indentazione sia venuta correttamente questa volta...
    PS2 evidentemente sbaglio qualcosa perchè nonostante uso CODE per inserire il codice e chiudo il tag, mi stampa tutto su una riga.
    No, non è venuta corretta.
    Non usare il tasto CODE, usa direttamente i tags ed incolla in mezzo il tuo codice.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.