-2

これを手伝ってもらえますか、CSV からの 2 つの整数を追加して txtfile に保存したかったのですが、問題は文字列であり、整数に変換すると多くのエラーが発生することです。ありがとうございました。 .

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;

public class CSVReader {
public static void main (String[]arg)throws Exception {

    String readFile = "C:/Users/user/Desktop/student.csv";
    String writeFile = "C:/Users/user/Desktop/data.txt";

    // Read a comma-separated values (CSV) file.
    BufferedReader CSVFile = new BufferedReader (new FileReader(readFile));

    // Read line.
    String dataRow = CSVFile.readLine();

    // Create an array of student
    List<Student> students = new ArrayList <Student> ();


    // The while checks to see if the data is null. If
    // it is, we’ve hit the end of the file. If not,
    // process the data.
    while (dataRow !=null){
        String [] dataArray = dataRow.split(",");
        System.out.println(dataRow);
        Student student = new Student();
        student.setStudentName(dataArray[0]);
        student.setScore1(dataArray[1]);
        student.setScore2(dataArray[2]);
        students.add(student);
        dataRow = CSVFile.readLine();
        }

    // Close the file once all data has been read.
    CSVFile.close();

    StringBuilder sb = new StringBuilder();

    FileWriter fw = new FileWriter(writeFile);
    for (Student s : students){
        sb.append(s.studentName);
        System.out.println(s.studentName + " - " + (s.score1 + s.score2));

        // Writing to a text file.
        fw.write(sb.toString());
    }

    // Close the file once all data has been written.
    fw.close(); 
}

}

出力:

  che,cheche,chet
  100,100,100
  100,100,100
  null - 0
  null - 0
  null - 0

それはbr:

  che,cheche,chet
  100,100,100
  100,100,100
  che - 200
  cheche -200
  chet - 200
4

3 に答える 3

1

提供した情報が正しい場合、主な問題は、CSV データが一般的な行形式ではなく、列形式になっていることです。つまり、最初の行は名前で、次の行はスコアです。データの各「列」は、同じインデックスの「ヘッダー」と一致します。

サンプルデータ:

che, cheche, chet    -- row[0]
100, 100,    100     -- row[1]
100, 100,    100     -- row[2]

したがって、row[0] は名前ですが、行の最初の項目が名前で、2 番目と 3 番目の項目がスコアであるかのようにデータを解析しています。これは、このサンプル データに基づく場合ではありません。

スコアが必要な場合は、各行の適切なインデックスを取得する必要があります。つまり、行 [1] [0] と行 [2] [0] になります。

これが実際に当てはまる場合は、最初の行を処理して名前を取得し、残りの行を処理してスコアを取得する必要があります。

于 2013-03-14T12:02:33.397 に答える
0

あなたが試すことができます

int number = Integer.parseInt("your string here");

例:

   String one = "1";
   String two = "2";
   System.out.println(Integer.parseInt(one) + Integer.parseInt(two));
于 2013-03-14T10:37:08.203 に答える
0

コードでいくつかの間違いを犯しました。

  1. 学生クラスのスコア変数は整数でなければなりません。
  2. 文字列を整数に変換するには、Integer.parseInt メソッドを使用する必要があります。コンバージョンは、スコア値を設定している段階であることが理想的です。
  3. なぜ学生オブジェクトを ArrayList に追加するのですか? テキストファイルに直接書き込めませんか?
于 2013-03-14T10:49:58.767 に答える