首先,我了解到我想像这样进行上转换是不寻常的,但是请耐心等待。我们是通过网站导出获取这些csv文件的,我们没有选择以其他任何形式获取它的选项。
现在,进入一个问题:
我有这个旧代码,可以为我完成此过程。它基本上读取每一行,然后选择,
s
之间的每个值。这对于我转换的某些样本效果很好,但是当归结为使用给定的样本时,某些值就不合适了。
我在Notepad ++中打开文件,并意识到某些单元格本身包含,
s。CSV文件通过用"
s 包围这些单元来解决此问题。请参阅以下示例:
。
这样可以正常工作:
John,Smith,johnsmith@email.com,burgers
但是,这不会:
John,Smith,johnsmith@email.com,"burgers, french fries"
。
不幸的是,我的代码(String strar[] = thisLine.split(",");
)没有考虑到某些单元格包含逗号,会将它们分成不同的列,例如:"burgers
和french fries"
。
。
如何使程序有效地将"
s 包围的文本视为单个值,而不是两个单独的值?
。
让我知道是否可以为您清除其他任何内容。
非常感谢您的帮助,
贾斯汀
设法回答了我自己的问题。经过一些搜索,我设法在这里找到了这个小pdf:
http://www.objectmentor.com/resources/articles/tfd.pdf
从那里,我设法采用了第35页上的代码来与我的程序一起使用。所有功劳归于Jeff Langr, 2001
。我所做的就是使其与Java当前的某些标准兼容。
这是将来可能会遇到此问题的所有人员的代码。
import java.io.BufferedReader;
import java.io.IOException;
import java.util.ArrayList;
public class CSVReader {
private BufferedReader reader;
private String line;
private static final String DOUBLE_QUOTE = "\"";
private static final String COMMENT_SYMBOL = "#";
private static final char stateINIT = 'S';
private static final char stateCOMMENT = '#';
private static final char stateQUOTED_DATA = 'q';
private static final char stateQUOTE_IN_QUOTED_DATA = 'Q';
private static final char stateDATA = 'D';
private static final char stateNEW_TOKEN = 'N';
private static final char stateWHITESPACE = 'W';
public CSVReader(String filename) throws IOException {
reader = new BufferedReader(new java.io.FileReader(filename));
loadNextNonCommentLine();
}
public ArrayList<String> next() throws IOException {
if (line == null)
throw new IOException("Read past end of file");
ArrayList<String> columns = columnsFromCSVRecord(line);
loadNextNonCommentLine();
return columns;
}
public boolean hasNext() {
return line != null;
}
void loadNextNonCommentLine() throws IOException {
do
line = reader.readLine();
while (line != null && line.startsWith(COMMENT_SYMBOL));
if (line == null)
reader.close();
}
public ArrayList<String> columnsFromCSVRecord(String line) throws IOException {
char state = stateINIT;
char ch;
int i = 0;
ArrayList<String> tokens = new ArrayList<String>();
StringBuffer buffer = new StringBuffer();
char[] charArray = line.toCharArray();
while (i < charArray.length) {
ch = charArray[i++];
switch (state) {
case stateINIT:
switch (ch) {
case '"':
buffer.append(ch);
state = stateQUOTED_DATA;
break;
case ',':
state = stateNEW_TOKEN;
tokens.add(clean(buffer));
buffer = new StringBuffer();
break;
case '\t':
case ' ':
break;
case '#':
state = stateCOMMENT;
break;
default:
state = stateDATA;
buffer.append(ch);
break;
}
break;
case stateCOMMENT:
break;
case stateQUOTED_DATA:
switch (ch) {
case '"':
buffer.append(ch);
state = stateQUOTE_IN_QUOTED_DATA;
break;
default:
buffer.append(ch);
break;
}
break;
case stateQUOTE_IN_QUOTED_DATA:
switch (ch) {
case '"':
state = stateQUOTED_DATA;
break;
case ',':
state = stateNEW_TOKEN;
tokens.add(clean(buffer));
buffer = new StringBuffer();
break;
case ' ':
case '\t':
break;
case '#':
tokens.add(clean(buffer));
state = stateCOMMENT;
break;
default:
throw new IOException("badly formed CSV record:" + line);
}
break;
case stateDATA:
switch (ch) {
case '#':
tokens.add(clean(buffer));
state = stateCOMMENT;
break;
case ',':
state = stateNEW_TOKEN;
tokens.add(clean(buffer));
buffer = new StringBuffer();
break;
default:
buffer.append(ch);
break;
}
break;
case stateNEW_TOKEN:
switch (ch) {
case '#':
tokens.add(clean(buffer));
state = stateCOMMENT;
break;
case ',':
tokens.add(clean(buffer));
buffer = new StringBuffer();
break;
case ' ':
case '\t':
state = stateWHITESPACE;
break;
case '"':
buffer.append(ch);
state = stateQUOTED_DATA;
break;
default:
state = stateDATA;
buffer.append(ch);
break;
}
break;
case stateWHITESPACE:
switch (ch) {
case '#':
state = stateCOMMENT;
break;
case ',':
state = stateNEW_TOKEN;
// ACCEPT NEW EMPTY COLUMN HERE??
break;
case '"':
buffer.append(ch);
state = stateQUOTED_DATA;
break;
case ' ':
case '\t':
break;
default:
state = stateDATA;
buffer.append(ch);
break;
}
break;
default:
break;
}
}
if (state == stateQUOTED_DATA)
throw new IOException("Unmatched quotes in line:\n" + line);
if (state != stateCOMMENT)
tokens.add(clean(buffer));
return tokens;
}
public String clean(StringBuffer buffer) {
String string = buffer.toString().trim();
if (string.startsWith(DOUBLE_QUOTE))
return string.substring(1, string.length() - 1);
return string;
}
}
问题内容: 这里有人知道在Java中将csv文件转换为xls或xlsx文件的任何快速,干净的方法吗? 我已经有一些东西可以管理csv文件,并且我需要与其他程序具有额外的兼容性。 除了包名称外,示例代码始终受到人们的赞赏。 非常感谢, 贾斯汀 到目前为止,这是我的代码。我需要从行中删除返回值(“ \ n”)。我的某些单元格包含多行信息(一个列表),因此我可以在csv中使用“ \ n”来表示 单元格中
这篇文章很长,因为我想更好地解释上下文。 我的主要数据源是netCDF格式,我想转换成CSV文件。 有一段时间,我一直在用Python进行转换。作为一个例子,我使用一个先前修改过的netCDF数据(m 可以注意到: < li >第一行包括用逗号分隔的变量名。第二行及以上的值也用逗号分隔。 < li >纬度和经度值不四舍五入。 如上图所示,是所需的数据表示。 之后,我决定使用气候数据操作员(CDO)
场景: 如下图, 红框中的数据是后台传过来的时间, 因为是一串字符串, 在 ts 中我就没办法对这个时间做处理 (例如转成数字、获取年月日等) 对应的 ts 代码 问题简述1: 我在model中定义的 createTime 和 updateTime, 都是 number 类型, 并且我在接收 res 时候已经指定接收对象是一个 Icon 类型的数组了, 但为什么我最终 res.icons[0].c
问题内容: 还有其他人在导入项目时遇到问题吗?我总共有100个错误和17个警告。这在中完美运行。我按照步骤创建了Gradle构建文件。在尝试构建项目之前,没有导入错误。 我还尝试过重新下载ABS并重新下载到我的项目中。 ABS是否存在已知问题?(当然,现在是基于Android Studio的) 这是我看到的一些错误: 任何帮助真的很感激 编辑: 似乎没有使用标准IntelliJ IDEA的问题。在
问题内容: 有谁知道是否有可以让我将XLS最好转换为JSON的应用程序? 我还将为CSV转换程序做准备,因为如果周围什么都没有的话,我可能最终不得不写自己。 问题答案: 这对我来说效果很好,不需要上传文件: https://github.com/cparker15/csv-to- json?files=1
我遇到了一些非常奇怪的事情。当导出到CSV时,我的顶行显示引号,而下面的行显示向下。 我使用UTF8编码,并手动将双引号添加到值中,以便用引号括起来。 正在使用的代码是 在excel中显示的结果显示为(https://ibb.co/ntMYdw) 当我在记事本中打开文件时,文本显示如下。但是每行显示不同。为什么第一行显示它们,第二行不显示。记事本结果显示为(https://ibb.co/fMkWW