我无法通过fread读取此csv:
abstract class APICallback<T> implements Callback<T> {
abstract void onSuccess(Call<T> call, T result);
@Override
public void onResponse(Call<T> call, Response<T> response) {
if (response.body() != null) {
if (response.body() instanceof APIError) {
// this is not working
} else {
onSuccess(call, response.body());
}
} else {
apiError = new APIError("Unknown error");
bus.post(new APIErrorEvent(apiError));
}
}
@Override
public void onFailure(@NonNull Call<T> call, @NonNull Throwable t) {
String message = t.getLocalizedMessage() != null ? t.getLocalizedMessage() : "Unknown error";
apiError = new APIError(message);
bus.post(new APIErrorEvent(apiError, source));
}
}
我认为是因为在vim中我看到了这些字符:
➜ Downloads cat t2.csv
47616412|76-398-12||||7639812
47616413|53-1696-18||||53169618
fread在第4列放了一个换行符。如何处理?
修改1
请注意,标准控制台输出不显示这些字符:
47616412|76-398-12||^@||7639812
我只在vim中看到它们:
➜ Downloads cat t2.csv
47616412|76-398-12||||7639812
47616413|53-1696-18||||53169618
修改2
进一步注意47616412|76-398-12||^@||7639812
47616413|53-1696-18||^@||53169618
和read.csv
的工作原理:
skipNul
修改3
这是文件! dropbox download
答案 0 :(得分:4)
这已在dev 1.12.3中修复(请参见NEWS):
- fread()现在跳过嵌入式NUL(\ 0)#3400。感谢Marcus Davy提供的示例报告,以及Roy Storey的初始PR。
我检查了您附加到该问题的文件,在CRAN上的1.12.2确实失败了,但是可以在dev中使用。
> library(data.table) # v1.12.2 on CRAN 07 Apr 2019
> fread("~/Downloads/t2.csv")
Empty data.table (0 rows and 1 cols): 47616412|76-398-12||
Warning message:
In fread("~/Downloads/t2.csv") :
Stopped early on line 2. Expected 1 fields but found 1. Consider fill=TRUE
and comment.char=. First discarded non-empty line: <<>>
但是在dev 1.12.3中它现在可以工作了:
> library(data.table) # v1.12.3 in development as of 17 Apr 2019
> fread("~/Downloads/t2.csv")
V1 V2 V3 V4 V5 V6
<int> <char> <lgcl> <lgcl> <lgcl> <int>
1: 47616412 76-398-12 NA NA NA 7639812
2: 47616413 53-1696-18 NA NA NA 53169618
>