Файл CSV, закодированный в Unicode, приводит к сбою программы JAVA.Хорошо работает с кодировкой ANSI - PullRequest
0 голосов
/ 14 мая 2019

У меня есть программа JAVA, которую я написал несколько лет назад. Он читает в некоторых файлах CSV и помещает данные в несколько массивов. Существует расчет по некоторым данным, чтобы получить процент. Соответствующие данные извлекаются из массивов и объединяются в один массив. Затем данные записываются обратно в CSV-файл.

Эта программа работала безупречно в течение трех лет. Сервер, который выводит файлы CSV, был обновлен, и теперь он выпускает файлы, закодированные в Unicode вместо ANSI. Теперь я получаю исключение ниже. Если я конвертирую файлы в ANSI, он все равно работает нормально. Я пытаюсь выяснить, как заставить мой код работать с новыми файлами Unicode.

Exception in thread "main" java.lang.NumberFormatException: For input string: "1
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
    at java.lang.Double.parseDouble(Double.java:538)
    at javaapplication2.JavaApplication2.main(JavaApplication2.java:206
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication2;
import java.io.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;


public class JavaApplication2{

    static String xStrPath;
    static String [][] totArray;
    static String [][] scrArray;
    static String [][] scrapArray;
    static String [][] btsArray;
    static String [][] effArray;
    static Double [] spArray;


    public static void main(String[] args) {

        FileWriter writer = null;
        totArray = new String[50][5];
        scrArray = new String[50][5];
        scrapArray = new String[50][5];
        btsArray = new String[50][5];
        effArray = new String[50][5];
        spArray = new Double [50];
        Scanner scanIn = null;
        int Rowtot = 0;
        int Rowscr = 0;
        int Roweff = 0;
        String InputLine = "";
        String totFileLocation;
        String scrFileLocation;
        String effFileLocation;
        Double s1;
        Double t1;

        int d1 = 0;
        int y = 0;


        for (int a = 0; a < btsArray.length; a++){
            btsArray[a][0] = "0";
            btsArray[a][1] = "0";
            btsArray[a][2] = "0";
            btsArray[a][3] = "0";
            btsArray[a][4] = "0";                                  
        }

        for (int a = 0; a < scrArray.length; a++){
            scrArray[a][0] = "0";
            scrArray[a][1] = "0";
            scrArray[a][2] = "0";
            scrArray[a][3] = "0";            
        }

        for (int a = 0; a < totArray.length; a++){
            totArray[a][0] = "0";
            totArray[a][1] = "0";
            totArray[a][2] = "0";
            totArray[a][3] = "0";           
        }

        for (int a = 0; a < scrapArray.length; a++){
            scrapArray[a][0] = "0";
            scrapArray[a][1] = "0";
            scrapArray[a][2] = "0";
            scrapArray[a][3] = "0";            
        }

        for (int a = 0; a < effArray.length; a++){
            effArray[a][0] = "0";
            effArray[a][1] = "0";
            effArray[a][2] = "0";
            effArray[a][3] = "0";    
        }        


        totFileLocation = "C:\\Scrap\\tot yds.csv";
        scrFileLocation = "C:\\scrap yds.csv";
        effFileLocation = "C:\\insp eff.csv";
        System.out.println("\n****** Setup Array ******");

//***************Read in values from tot yds.csv and put in totArray************
        try{
            scanIn = new Scanner(new BufferedReader(new FileReader(totFileLocation)));

            while (scanIn.hasNextLine()){                
                InputLine = scanIn.nextLine();                
                String[] InArray = InputLine.split(",");

                for (int x = 0; x < InArray.length; x++){                    
                    totArray[Rowtot][x] = String.valueOf(InArray[x]);                 
                }
                Rowtot++;                
            }                        
        } catch (FileNotFoundException r){
        }

//***************Read in values from scrap yds.csv and put in scrArray**********

            try{
                scanIn = new Scanner(new BufferedReader(new FileReader(scrFileLocation)));

                while (scanIn.hasNextLine()){                   
                    InputLine = scanIn.nextLine();                    
                    String[] InArray = InputLine.split(",");

                    for (int x = 0; x < InArray.length; x++){
                        scrArray[Rowscr][x] = String.valueOf(InArray[x]);
                    }
                    Rowscr++;                    
                }               
            } catch (FileNotFoundException r){
                System.out.println(r);
            }

 //**************Read in values from insp eff.csv and put in effArray***********

        try{
            scanIn = new Scanner(new BufferedReader(new FileReader(effFileLocation)));

            while (scanIn.hasNextLine()){                
                InputLine = scanIn.nextLine();                
                String[] InArray = InputLine.split(",");

                for (int x = 0; x < InArray.length; x++){
                    effArray[Roweff][x] = String.valueOf(InArray[x].replace("\"", "").replace(" ", ""));

                }
                Roweff++;                
            }                       
        } catch (FileNotFoundException r){
        }

 //*****Transfer values from totArray to btsArray to clean up empty cells*****

            System.out.println("\n****** btsArray ******");    
                for (int d = 1; d < totArray.length; d++){
                    if(totArray[d][1].equals("EVS")){
                        d++;
                    }
                    if(totArray[d][0].equals("Total 0")){
                        break;
                    }
                    else if(totArray[d][2].equals("Default")){                        
                    }

                    else {
                        btsArray[d1][0] = totArray[d][1];
                        btsArray[d1][1] = totArray[d][2];
                        btsArray[d1][2] = totArray[d][3];
                        btsArray[d1][3] = "0";
                        System.out.println(btsArray[d1][0] + "|" + btsArray[d1][1]
                        + "|" + btsArray[d1][2]);
                        d1++;
                    }
                }

//*****Transfer values from scrArray to scrapArray to clean up empty cells******

        System.out.println("\n****** Scrap Array ******");        
                for (int e = 1; e < scrArray.length; e++){
                    if(scrArray[e][0].equals("Total 0")){

                        break;
                    }

                    else {
                        scrapArray[e][0] = scrArray[e][1];
                        scrapArray[e][1] = scrArray[e][2];
                        scrapArray[e][2] = scrArray[e][3];
                        System.out.println(scrapArray[e][0] + " | " + scrapArray[e][1]
                    + " | " + scrapArray[e][2]);
                    }
                    }


//****This loops through scrapArray and btsArray to pull scrap values into****
//****the btsArray ***********************************************************

                for (int f = 0; f < 49; f++){
                    for ( int f1 = 1; f1 < 49; f1++){
                        if(scrapArray[f1][0].equals(btsArray[f][0])){
                            if(scrapArray[f1][1].equals(btsArray[f][1])){
                            btsArray[f][3] = scrapArray[f1][2];

                            break;
                            }

                        }
                    }
                }

//******This converts total and scrap yards to a double value. Then does********
//******divides scrap by total and multiplies by 100 to get the scrap %*********
//******then copies that value into a new array*********************************

                for(int k = 0; k < btsArray.length; k++){

                    t1 = Double.valueOf(btsArray[k][2]);
                    s1 = Double.valueOf(btsArray[k][3]);

                    spArray[y] = (s1 / t1) * 100;

                    y++;
                }

//******************************************************************************

                for (int q = 0; q < 49; q++){
                    for ( int q1 = 1; q1 < 49; q1++){
                        if(btsArray[q][0].equals(effArray[q1][0])){
                            btsArray[q][4] = effArray[q1][2];

                        }    
                    }                    
                }

//****************************************************************************** 

        System.out.println("\n****** bts Array w/scrap ******");        
                for(int j = 0; j < btsArray.length; j++){

                    if(btsArray[j][0].equals("0")){
                        break;
                    }

                    else{ 
                        System.out.println(btsArray[j][0] + " | " +
                            btsArray[j][1] + " | " + btsArray[j][2] + " | " +
                            btsArray[j][3]+ " | " + spArray[j] + " | " + 
                            btsArray[j][4]);
                    }
                }

//******************************************************************************

        try {
            writer = new FileWriter("C:\\scrap\\scrap.csv");
                writer.append("Machine" + " , " + "Inspector" + " , " + 
                        "Total YDS" + " , " + "ScrapYDS" + " , " + "Scrap %" + 
                        " , " + " Efficiency" + "\n");
            for (int m = 0; m < btsArray.length; m++){
                if(btsArray[m][2].equals("0.0")){   
                }
                if(btsArray[m][2].equals("0")){   
                }
                else if(btsArray[m][0].equals("0")){
                    break;
                }

                else{
                writer.append(String.valueOf(btsArray[m][0] + " , " + 
                        btsArray[m][1]+ " , " + btsArray[m][2] + " , " + 
                        btsArray[m][3] + " , " + String.format("%.2f", spArray[m]) + " , " + btsArray[m][4]));
                writer.append("\n");
                }
            }

            writer.close();
        } catch (IOException ex) {
            Logger.getLogger(JavaApplication2.class.getName()).log(Level.SEVERE, null, ex);
        }                
                }
    }
...