英文:
Extract csv values into key value pairs
问题
我有一个带有两列的CSV文件;ColumnA和ColumnB。我想提取ColumnA和ColumnB的两个值,以便稍后在for循环中解析它们。
CSV示例:
John, John Smith
James, James Bond
当我对变量oldName进行系统打印时,我的程序成功地提取了ColumnA的值。然而,我不知道如何提取ColumnB的值,我认为原因是我选择的数据结构,我不知道如何正确地调整它以满足我的需求?
基本上,我希望在我的for循环中,变量oldName = "John",变量newName = "John Smith",用于第一次迭代,以及oldName = "James",变量newName = "James Bond",用于第二次迭代等。
String fName = "TestFile.csv";
String thisLine;
FileInputStream fis = new FileInputStream(fName);
DataInputStream myInput = new DataInputStream(fis);
String oldName;
String newName;
int i=0;
String[] GroupArray = new String[1000];
while ((thisLine = myInput.readLine()) != null)
{
String strar[] = thisLine.split(",");
for(int j=0;j<strar.length;j++)
{
if(i!=0)
{
GroupArray[i] = strar[j];
}
else
{
GroupArray[i] = strar[j];
}
}
i++;
}
try{
for (int l = 0; l < i; l++)
{
oldName = GroupArray[0];
newName = GroupArray[1];
out.println ("User: "+ oldName +" has been renamed to: "+ newName +"<BR>");
}
以上为翻译内容,不包含代码部分。
英文:
I have a CSV file with two columns; ColumnA and ColumnB. I want to extract both values of ColumnA and ColumnB to parse them later in a for loop.
Example of CSV:
John, John Smith
James, James Bond
My program extracts successfully ColumnA when I make a system print of the variable oldName. However, I do not know how to extact the value of ColumnB, and I think the reason is the data structure I have chosen, which I do not know how to correctly adapt for my needs?
Basically, I want for my for loop that the variable oldName = "John" and newName = "John Smith" for the first iteration, and for the second oldName = "James" and newName = "James Bond" etc.
String fName = "TestFile.csv";
String thisLine;
FileInputStream fis = new FileInputStream(fName);
DataInputStream myInput = new DataInputStream(fis);
String oldName;
String newName;
int i=0;
String[] GroupArray = new String[1000];
while ((thisLine = myInput.readLine()) != null)
{
String strar[] = thisLine.split(",");
for(int j=0;j<strar.length;j++)
{
if(i!=0)
{
GroupArray[i] = strar[j];
}
else
{
GroupArray[i] = strar[j];
}
}
i++;
}
try{
for (int l = 0; l < i; l++)
{
oldName = GroupArray[0];
newName = GroupArray[1];
out.println ("User: "+ oldName +" has been renamed to: "+ newName +"<BR>");
答案1
得分: 1
你的代码本质上是正确的,但有一些多余的代码。需要注意的是,DataInputStream#readLine
方法已被弃用,因此我使用了 BufferedReader#readLine
方法。
String filename = "/path/to/your/file";
File csv = new File(filename);
BufferedReader reader = new BufferedReader(new FileReader(csv));
String[] groupArray = new String[1000];
String line;
int i = 0;
while ((line = reader.readLine()) != null) {
String[] split = line.split(",");
groupArray[i] = split[0].trim();
groupArray[i + 1] = (split.length > 1) ? split[1].trim() : "";
i += 2;
}
String oldName, newName;
for (int j = 0; j < i; j += 2) {
oldName = groupArray[j];
newName = groupArray[j + 1];
System.out.println("User: " + oldName + " has been renamed to: " + newName + "<BR>");
}
输入:
John, John Smith
James, James Bond
输出:
User: John has been renamed to: John Smith<BR>
User: James has been renamed to: James Bond<BR>
英文:
You were on the right track but you had some superfluous code. Note that DataInputStream#readLine
is deprecated, thus I used BufferedReader#readLine
.
String filename = "/path/to/your/file";
File csv = new File(filename);
BufferedReader reader = new BufferedReader(new FileReader(csv));
String[] groupArray = new String[1000];
String line;
int i = 0;
while((line = reader.readLine()) != null) {
String[] split = line.split(",");
groupArray[i] = split[0].trim();
groupArray[i+1] = (split.length > 1) ? split[1].trim() : "";
i += 2;
}
String oldName, newName;
for(int j = 0; j < i; j += 2) {
oldName = groupArray[j];
newName = groupArray[j+1];
System.out.println ("User: "+ oldName +" has been renamed to: "+ newName +"<BR>");
}
Input:
John, John Smith
James, James Bond
Ouput:
User: John has been renamed to: John Smith<BR>
User: James has been renamed to: James Bond<BR>
答案2
得分: 1
我认为你在不必要地使任务变得过于复杂。以下示例应该作为一个起点:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) throws IOException {
File file = new File("TestFile.csv");
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
List<String[]> allLines = new ArrayList<>();
while ((line = br.readLine()) != null) {
String[] splited = line.split("\\s*,\\s*");
allLines.add(splited);
}
for(String[] row : allLines){
String oldName = row[0];
String newName = row[1];
System.out.println("User: "+ oldName +" has been renamed to: "+ newName );
}
}
}
英文:
I think you are overcomplicating the task without need. The following example should serve as a starting point:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) throws IOException {
File file = new File("TestFile.csv");
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
List<String[]> allLines = new ArrayList<>();
while ((line = br.readLine()) != null) {
String[] splited = line.split("\\s*,\\s*");
allLines.add(splited);
}
for(String[] row : allLines){
String oldName = row[0];
String newName = row[1];
System.out.println ("User: "+ oldName +" has been renamed to: "+ newName );
}
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论