阅读与阅读用Java打破CSV文件:

时间:2017-11-23 06:07:36

标签: java arrays csv

我正在编辑这个问题更具体,我已经学会了一些Jave找到问题的解决方案。我有一个CSV格式的文件,如下所示:The CSV File containing the information 或者像这样的excel:Same CSV File in Excel 现在我使用Java程序读取第二行文件并将每个逗号分隔值分开并将其写入控制台以及其他输出文件,并且它很容易完成。现在我试图打破最后一个值:

S / 1,M / 1,L / 1,XL / 1 | 2XL / 1,3XL / 1,4XL / 1,5XL / 1 | MT / 1,LT / 1(原件) S / 1,M / 1,L / 1,XL / 1,2XL / 1,3XL / 1,4XL / 1,5XL / 1,MT / 1,LT / 1(使用程序修改以移除空间并更换管道(|)用逗号。

在每个值中,在Forward Slash(/)之前有大小名称,其数量在此之后。我正在尝试使用正斜率(/)将大小与其数量分开。问题是尺寸也可能包含正斜杠(例如12 / BT或2BT / 2x)。我尝试了许多算法,比如反转整个数组或存储斜线计数但没有取得成功。读取文件并将逗号分隔值分解为单独的文件列的整个代码如下:

import java.io.*;
import javax.swing.*;
public class ReadFile3c{
public static void main(String args[]){
    try{
        //Getting File Name
        String fileName = JOptionPane.showInputDialog("Enter File Name") + ".csv";
        //Creating Stream with File
        FileReader fr = new FileReader(fileName);
        //Applying Buffer Filter
        BufferedReader br = new BufferedReader(fr);


        //Reading First line then Second Line
        String s = br.readLine();
        s = br.readLine();
        s = s + ",";//adding comma at the end of the file
        s = s.replaceAll("\\s",""); //Eliminating Spaces
        s = s.replaceAll("\\|",",");    //Replacing Pipes with comma
        char charArray[] = s.toCharArray();

        //Declaring Strings and variablse for value separating function
        int n = 0;                              //Array Variable
        int m = 0;                              //Array Variable
        String[] inverted = new String[3];      //String to store inverted Commas Values
        String[] comma = new String[10];        //String to store comma Values
        String value = "";                      //Storing character values

        try{
            //Loop to cycle each character of file
            for(int j = 0; j<charArray.length;j++){

                //Inverted comma value separator
                if (charArray[j] == '"') {
                    j++;
                    //loop to gather values b/w invreted comma
                    while((charArray[j] != '"')){
                        value = value + charArray[j];
                        j++;
                    }
                    inverted[n] = value;
                    n++;
                    j++;
                    value = "";
                }else{ 
                    j = j - 1;
                    //comma Value separator
                    if (charArray[j] == ','){
                        j++;
                        //loop to gether values b/w commas
                        while((charArray[j] !=',')){
                            value = value + charArray[j];
                            j++;
                        }
                        comma[m] = value;
                        m++;
                        value = "";
                    }       
                }
            }
        }catch(Exception ex){
            System.out.println("in inner Exception Block" + ex);
        }

        //declaring variables to storing values
        String name, patternCode, placeSizeQty,width,length,utill,pArea,pPerimeter,totalPcs,placePcs,tSizes;
        name = inverted[0];
        patternCode = inverted[1];
        placeSizeQty = inverted[2];
        width = comma[0];
        length = comma[1];
        utill = comma[2];
        pArea = comma[3];
        pPerimeter = comma[4];
        totalPcs = comma[5];
        placePcs = comma[6];
        tSizes = comma[7];

        //printing all values on Console
        System.out.println("\nMarkerName: " + name);
        System.out.println("Width :" + width);
        System.out.println("Length :" + length);
        System.out.println("Utill :" + utill);
        System.out.println("Place Area :" + pArea);
        System.out.println("Place Perimeter :" + pPerimeter);       
        System.out.println("PatternCode: " + patternCode);
        System.out.println("PlaceSizeQty: " + placeSizeQty);
        System.out.println("Total Pcs :" + totalPcs);
        System.out.println("Place Pcs :" + placePcs);
        System.out.println("Total Sizes :" + tSizes);

        //Creating Output file
        String fileOutput = JOptionPane.showInputDialog("Enter Output File Name") + ".txt";
        //File Writer
        try{
            //Creating Stream with output file
            FileWriter fw = new FileWriter(fileOutput);
            //Applying Buffring Stream
            PrintWriter pw = new PrintWriter(fw);
            //Declaration
            String outputLine = null;
            //Writing Inverted inputs
            for (int u = 0; u <=2 ;u++ ) {
                outputLine = inverted[u];
                pw.println(outputLine);
                System.out.println("Writing: " + outputLine);
            }//end of for
            //writing comma inputs
            for (int t = 0;t <=7  ; t++ ) {
                outputLine = comma[t];
                pw.println(outputLine);
                System.out.println("Writing: " + outputLine);
            }//end of for

            pw.flush();
            pw.close();
            fw.close();
            fr.close();
            br.close();                 

        }catch(Exception ex){
            System.out.println("Output: " + ex);
        }//End of output catch

    }catch(IOException ex){
        System.out.println(ex);
    }//end of catch
}//end of catch
}//end of Class

打破大小和数量并将其存储在Double数组(未完成)的代码如下:

import java.io.*;
import javax.swing.*;
public class ReadFileInvert{
public static void main(String args[]){
    try{
        String fileName = JOptionPane.showInputDialog("Enter File Name") + ".csv";
        FileReader fr = new FileReader(fileName);
        BufferedReader br = new BufferedReader(fr);
    String s = br.readLine();
        System.out.println(s);
        s = s.replaceAll("\\s","");
        s = s.replaceAll("\\|",",");
    System.out.println(s);  

        char charArray[] = s.toCharArray();
        char charArrayI[] = new char[charArray.length + 1]; 

        int j = 0;
        String value = "";

        for(int i = charArray.length; i > 0; i--){
            charArrayI[j] = charArray[i];
            value = value + charArrayI[j];
            j++;                
        }
        System.out.println("1" + value);

    }catch(Exception ex){
        System.out.println(ex);
    }
}
}

现在很简单,我只想将大小(可能包含正斜杠)与其数量分开(在每个值的最后一次斜杠之后),并将其存储在double数组中,如charArray [sizeName] [Qty]。对不起,如果我没有解释我的问题,因为我正在学习编码。但我会提供你想要的尽可能多的信息。

2 个答案:

答案 0 :(得分:1)

您是否考虑过查看CAD软件导出以查看文件创建方是否有解决方案?或者此文件来自第三方?

答案 1 :(得分:0)

好。因此,经过一整天的辛苦工作,我发现了以下解决问题的方法:

import java.io.*;
import javax.swing.*;
public class ReadFileInvert2{
public static void main(String args[]){
    try{
        String fileName = JOptionPane.showInputDialog("Enter File Name") + ".csv";
        FileReader fr = new FileReader(fileName);
        BufferedReader br = new BufferedReader(fr);
        String s = br.readLine();
        System.out.println(s);
        s = s.replaceAll("\\s","");
        s = s.replaceAll("\\|",",");
        System.out.println(s);  
        char charArray[] = s.toCharArray(); 
        int x = charArray.length - 1;
        charArray[x] = ',';

        int no = 1;
        int size = 1;
        int qty = 2;
        String sizeS = "";
        String qtyS = "";
        //String resSet[][] = new String[4][2];
        String resSize[] = new String[20];
        String resQty[] = new String[20];
        int slashNo = 0;
        String value = "";


        for (int j = 1; j < charArray.length; j++){
            int n = j;
            if (charArray[j] == ','){
                j++;
            }
            while (charArray[j] != ','){
                if (charArray[j] == '/') {
                    slashNo = j;
                    //j++;
                }
                value = value + charArray[j];
                //System.out.println(value);
                j++;
            }   
            for (int k = n;k < slashNo; k++ ) {
                sizeS = sizeS + charArray[k];
                //System.out.println(sizeS);
            }
            for (int l = slashNo + 1; l < j; l++ ) {
                qtyS = qtyS + charArray[l];
                //System.out.println(qtyS);
            }
            resSize[no] = sizeS;
            System.out.println(resSize[no]);
            resQty[no] = qtyS;
            System.out.println(resQty[no]);

            System.out.println("Size is: " + resSize[no] + ", and Qty is: " + resQty[no]);

            no++;
            slashNo = 0;
            sizeS = "";
            qtyS = "";
        }
        String fileOutput = JOptionPane.showInputDialog("Enter Output File Name: ") + ".txt";
        try{
            FileWriter fw =  new FileWriter(fileOutput);
            PrintWriter pw = new PrintWriter(fw);
            String outputSize = null;
            String outputQty = null;

            for (int t = 1; t < no; t++) {
                outputSize = resSize[t];
                outputQty = resQty[t];
                pw.println(outputSize + " = " + outputQty);
                System.out.println("Writing: "+ outputSize + " = " + outputQty);
            }
            pw.flush();
            pw.close();
            fw.close();
            fr.close();
            br.close();
        }catch(Exception ex){
            System.out.println("Output " + ex);
        }
    }catch(Exception ex){
        System.out.println(ex);
    }   
}
}

现在采用通用形式,但以后会对其进行改进。但是仍然可以正常工作。感谢您的帮助堆栈溢出社区。