0

私のアプリケーションでは、jsp を使用してタブ区切りの csv ファイルの特定の列を読み取る必要があります。しかし、特定の列ではなく、行全体のデータを読み取ることができます。

この点で助けが必要です。私を助けてください

ありがとう

マイコード:

    <%@ page import="java.io.*"%>
    <html>
    <body>
    <% 
    String fName = "c:\\csv\\myfile.csv";
    String thisLine; 
    int count=0; 
    FileInputStream fis = new FileInputStream(fName);
    DataInputStream myInput = new DataInputStream(fis);
    int i=0; 
    %>
    <table>
    <%
    while ((thisLine = myInput.readLine()) != null)
   {
    String strar[] = thisLine.split(",");
    for(int j=0;j<strar.length;j++)
    {
    if(i!=0)
    {
     out.print(" " +strar[j]+ " ");
    }
    else
    {
    out.print(" <b>" +strar[j]+ "</b> ");
    }
    }
    out.println("<br>");
    i++;
    } 
    %>
    </table>
    </body>
    </html>
4

3 に答える 3

2

特定の列を読み取ることができるとは思いません.CSVParserを使用して行全体を読み取るか、CSVを1行ずつ読み取って分割してString配列を取得すると、特定の列を取得できますが、行全体のゲインを読み取る必要があります。

それを試してみてください。

    String fName = "C:\\Amit\\abc.csv";
    String thisLine;
    int count = 0;
    FileInputStream fis = new FileInputStream(fName);
    DataInputStream myInput = new DataInputStream(fis);
    int i = 0;
    while ((thisLine = myInput.readLine()) != null) {
        String strar[] = thisLine.split(",");
            System.out.println(strar[3]);
                        // Here column 2
        }
    }

このようにして、特定の列を読み取ることができます。

于 2012-06-13T10:52:47.543 に答える
0

先日Objective Cでも同様の問題がありましたが、これで解決しました。

この方法は、必要なデータの列番号がわかっていることを前提としています。(6 列中 1 列目が必要な場合は IE)

すべての行を文字列に読み取り、それらを 1 つに追加します。

データ サンプル: (列 1 ~ 6)

1,2,3,4,5,6
13,45,63,29,10,8
11,62,5,20,13,2

文字列 1 =1,2,3,4,5,6

文字列 2 =13,45,63,29,10,8

文字列 3 =11,62,5,20,13,2

次に、これを取得する必要があります。

結合された文字列 =1,2,3,4,5,6,13,45,63,29,10,8,11,62,5,20,13,2 //add in the missing "," when you concatenate strings

次に、文字列をすべての値の配列に分割する必要があります。

次のようなコードを使用します: (頭のてっぺんから書いたので、間違っている可能性があります。)

String[] values = combined.split(",");  

これで、次のようになります。

Values = `"1", "2", "3", ... etc`

最後のステップは、配列全体をループし、必要な列をモジュロすることです。

//Remember that java numbers arrays starting with 0.
//The key here is that all remainder 0 items fall into the first column.  All remainder 1 items fall into the second column.  And so on.

    for(int i = 0; i < values.length(); i++)
    {
            //Column1 - Column6 -> array lists of size values.length/number of columns
            //In this case they need to be size values.length/6
        if(i % 6 == 0)
            column1.add(values[i]);
        else if(i % 6 == 1)
            column2.add(values[i]);
        else if(i % 6 == 2)
            column3.add(values[i]);
        else if(i % 6 == 3)
            column4.add(values[i]);
        else if(i % 6 == 4)
            column5.add(values[i]);
        else if(i % 6 == 5)
                column6.add(values[i]);

    }

~~~~~~~~~~~~~~~~

編集:

質問にコードを追加しました。上記では、それらをメモリに保存していました。ループして印刷するだけです。while ループで、各行を個別に配列に分割し、列番号をハードコーディングするか、配列の長さをインデックスとしてモジュロします。

于 2012-06-13T10:58:21.413 に答える
0

public class ParseCSVs { public static void main(String[] args) {

    try {

        // csv file containing data
        String strFile = "./input//SIMNumbers.csv";

        String line = "";

        System.out.println("Enter line number to configure");
        Scanner sc = new Scanner(System.in);
        int lineNumber = sc.nextInt();

        BufferedReader br = new BufferedReader(new FileReader(strFile));
        if ((line = br.readLine()) != null) {

            String cvsSplitBy = ",";
            String blankCell = null;
            // use comma as separator
            String[] cols = line.split(cvsSplitBy);
            for (int i = 0; i < cols.length; i++)
                System.out.println("Coulmns = " + cols[i]);
            // System.exit(0);
        } else
            System.out.println("No data found in csv");
    } catch (IOException e) {
        e.printStackTrace();
    }
}
于 2014-12-08T15:06:48.613 に答える