Vector - wyciąganie damych

0

Witam! Mam program do wykonywania testu Shapiro-Wilka na podanych wynikach prób. Jedną z możliwości jest wczytanie danych z wybranego przez użytkownika pliku .xlsx.
Dane się wczytują i wyświetlają w tabeli(załącznik) - model posiada dwa Vectory, jeden z nagłówkami i drugi z danymi. Problem zaczyna się gdy, próbuję wyciągnąć dane z drugiego wektora, żeby wykonać na nich obliczenia. Jak wczytać te dane do tablicy jednowymiarowej, tak żeby każda komórka zawierała jedną wartość? Niestety z Vectora "wychodzą" mi całe wiersze i każdy zawiera wartości + nulle. Próbowałam to splitować i wrzucić do tablicy, ale niestety nie działa. Proszę o pomoc

	  static Vector dat;
	  static Vector data = Main2.data;
	  DecimalFormat df = new DecimalFormat("#.#", DecimalFormatSymbols.getInstance());
	 // String[][] tableData = (String[][]) Main2.getTableData(Main2.table);
	  String[] tab,tabt;
	  Object[] arr = data.toArray();
	  String tmp,tmp2;
	//double y;
	
	
	  
	public void licz() throws ParseException{
		/*ilosc = Main.getTextField().getText();
		System.out.println(ilosc);
		n = Integer.parseInt(ilosc);
		System.out.println(n);
		c=n/2;
		System.out.println(c);*/
		//System.out.println(data + "\n");
		for (int i =0; i<arr.length; i++){
			//for (int j=0; j<Main2.table.getColumnCount(); j++){
			//	if(data.elementAt(i).toString()!=null){
			tmp = data.elementAt(i).toString();
			tab = tmp.split(" ");
			System.out.print(Arrays.toString(tmp.split("null"))  + "Length: " + tab.length);
			System.out.println();
				//}
public void importExcelSheet(File file)  {
					
					data.clear();
					headers.clear();
			       
			        try {
			        	InputStream ExcelFileToRead = new FileInputStream(file);
			            Workbook workBook = WorkbookFactory.create(ExcelFileToRead);
			            Sheet sheet = workBook.getSheetAt(0);
			            Iterator rowIter = sheet.rowIterator();

			            while (rowIter.hasNext()) {
			                XSSFRow row = (XSSFRow) rowIter.next();
			                Iterator cellIter = row.cellIterator();
			                Vector<String> cellStoreVector = new Vector<>();

			                while (cellIter.hasNext()) {
			                    XSSFCell cell = (XSSFCell) cellIter.next();
			                    String cellTypeDesc = "";
			                    String cellValue = "";
			                    Integer cellType = cell.getCellType();

			                    switch (cellType) {
			                        case 0:
			                            cellTypeDesc = "NUMERIC";
			                            Double doubleValue = cell.getNumericCellValue();
			                            cellValue = String.valueOf(doubleValue);

			                         /*  if (HSSFDateUtil.isCellDateFormatted(cell)) {
			                                if (HSSFDateUtil.isValidExcelDate(doubleValue)) {
			                                    Date date = HSSFDateUtil.getJavaDate(doubleValue);

			                                    DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
			                                    cellValue = df.format(date);
			                                    System.err.println(cellValue);
			                                }
			                            } else { 
			                                Integer intValue = doubleValue.intValue();
			                                cellValue = String.valueOf(intValue);
			                            }*/

			                            break; 
			                        case 1:
			                            cellTypeDesc = "STRING";
			                            cellValue = cell.getStringCellValue();
			                            break;
			                        case 2:
			                            cellTypeDesc = "FORMULA";
			                            cellValue = cell.getCellFormula();
			                            break;
			                       /* case 3:
			                            cellTypeDesc = "BLANK";
			                            cellValue = "BLANK";
			                            break;
			                        case 4:
			                            cellTypeDesc = "BOOLEAN";
			                            boolean booleanValue = cell.getBooleanCellValue();
			                            cellValue = "" + booleanValue;
			                            break;*/
			                        case 5:
			                            cellTypeDesc = "ERROR";
			                            byte byteValue = cell.getErrorCellValue();
			                            cellValue = "" + byteValue;
			                            break; 
			                    }

			                    cellStoreVector.addElement(cellValue);
			                    //cellStoreVector.add("\n");
			                 
			                }
			                data.addElement(cellStoreVector);
0

Z tego co widzę to cellValue jest typu String i to wrzucasz do cellStoreVector który jest Vector<String> a tego z kolei do data który też jest wektorem.
Jeżeli chcesz po prostu przelecieć po wszystkich tych wartościach to możesz zrobić tak:

for(Vector<String> vector : data) {
   for(String string : vector) {
   // no i tutaj robisz co chcesz
   }
}

Vektor ma też metodę toArray którą możesz się zainteresować.

0

Przy tym sposobie czytania jesteś chyba skazany na porażkę. Nie odróżnisz komórki, w której była liczba 35.7 od komórki, w której był String "35.7".
Może warto utworzyć jeszcze jeden wektor typu Vector<Double>.

0

Udało mi się zrobić coś takiego, jednak kiedy próbuję wypisać jakikolwiek element tablicy tabt poza pętlą while, dukuje mi..nulle

	

for (int i =0; i<arr.length; i++){
			
			tmp = data.elementAt(i).toString();
			tab[i] = tmp;
			System.out.print(tab[i]  + "Length: " + tab.length);
			System.out.println();
		
	d = tmp.length();
	
				//tabt = new String[d*i];
				}
	 
		
		for(int j = 0; j<tab.length ; j++){
			
			StringTokenizer st = new StringTokenizer(tab[j], ",");
			while (st.hasMoreTokens()) {
				tabt = new String[d];
				tabt[j]=st.nextToken();
				//System.out.println("StringTokenizer Output: " + st.nextToken());
				System.out.print(tabt[j]);
				
			}

		}
		System.out.println("Tabt[2]: "+ tabt[2] + "Tabt.length= " + tabt.length);
0

Widocznie inna tablicę wypełniasz, a inną wypisujesz.

0
bogdans napisał(a):

Widocznie inna tablicę wypełniasz, a inną wypisujesz.

To ta sama tablica String[] tabt; zadeklarowana u góry klasy i zainicjowana w pętli while, gdzie jest wypełniana wartościami.

0

Nieprawda, wypisujesz tablicę utworzoną tu:

tabt = new String[d];
0

Tu tworzę tablicę:

String[] tabt = new String[d];

Tu wypełniam:

for(int j = 0; j<tab.length ; j++){
			
			StringTokenizer st = new StringTokenizer(tab[j], ",");
			while (st.hasMoreTokens()) {</quote>
				
				
				
				tabt[j]=st.nextToken();
				//System.out.println("StringTokenizer Output: " + st.nextToken());
				System.out.print(tabt[j]);
				//tabt[j]=(String) st.nextElement();
			}

	
		
		} 

Tu drukuję.. nulle.

System.out.println("Tabt[2]: "+ tabt[2] + "Tabt.length= " + tabt.length);
0

Przeczytaj jeszcze raz swój poprzedni post z kodem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1