我正在处理一个包含45312个实例(行)和8个属性的CSV文件。我想修改(使用一些数学运算)输入csv文件并写入它。为了修改CSV,我从每个实例(行)中提取了每个列值(v ="逗号分隔位置"),然后尝试修改它。但我在这里遇到的问题是,当for循环移动到下一次迭代时(如v = 3,v = 3),则前一次迭代(v = 2)中的所有修改后的实例值都将恢复为原始状态。最后,我想要处理所有修改的新CSV文件。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.*;
public class Normalization {
public static void main(String[] args)throws IOException {
String filename = "abc.csv";
File file = new File(filename);
BufferedWriter writer = null;
try{
writer = new BufferedWriter(new FileWriter("lyupdated.csv"));
for (int v = 1; v < 8; v++)
{
Scanner inputStream = new Scanner(file);
while (inputStream.hasNext())
{
String data = inputStream.next();
String[] values = data.split(",");
double balance = Double.parseDouble(values[v]);
balance=balance*10;//for mathoperation code simplification
values[v] = String.valueOf(balance);
// iterate through the values and build a string out of them
StringBuilder sb = new StringBuilder();
// String newData = sb.toString();
for (int i = 0; i < values.length; i++) {
sb.append(values[i]);
if (i < values.length - 1) {
sb.append(",");
}
}
System.out.println(sb.toString());
writer.write(sb.toString()+"\n");
}inputStream.close();
} writer.close();
}
catch (FileNotFoundException ex) {
Logger.getLogger(Normalization.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
答案 0 :(得分:0)
您的代码没有多大意义。您需要打开文件,有一个循环来逐行读取文件,并将每行拆分为8列。
但相反,看看你有什么:
for (int v = 1; v < 8; v++) {
Scanner inputStream = new Scanner(file);
所以,
正如Tom在评论中所说,使用专用于CSV文件解析和生成的库。它具有以下优点: