我在一个文件夹中有一堆TSV文件,我正在尝试解析并获取一些信息。每个文件都有不同的列(具有不同的标题),但其中一列在所有文件中都是通用的。我在文本文件中有一个我感兴趣的标题列表。我正在解析该文件并尝试使用uniVocity解析工具来获取这些特定列的信息。当我尝试使用一个或两个标头时,它工作正常,但是当文件中的所有标头都通过时,它什么也没有返回。
这是我的代码:
import com.univocity.parsers.tsv.TsvParser;
import com.univocity.parsers.tsv.TsvParserSettings;
import java.io.*;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static com.univocity.parsers.conversions.Conversions.toLowerCase;
public class getdata {
public static void main(String argv[]) throws IOException {
String filename = "tmp_collist.txt";
BufferedReader reader = new BufferedReader(new FileReader(filename));
Set<String> lines = new HashSet<String>(10000);
String line;
while ((line = reader.readLine()) != null) {
lines.add(line);
}
String str = lines.toString().replaceFirst("\\[", "");
StringBuilder _sb = new StringBuilder(str);
//str = '"' + _sb;
str = _sb.insert(0, '"').toString();
if (str != null && str.length() > 0 && str.charAt(str.length() - 1) == ']') {
str = str.substring(0, str.length() - 1);
}
str += '"';
str = str.replace(", ", "\",\"");
//System.out.print(str);
//reader.close();
File folder = new File("folder_location");
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
File file1 = listOfFiles[i];
if (file1.isFile() && file1.getName().endsWith(".txt")) {
TsvParserSettings settings = new TsvParserSettings();
settings.getFormat().setLineSeparator("\n");
settings.selectFields(str);
TsvParser parser = new TsvParser(settings);
List<String[]> resolvedData = parser.parseAll(new FileReader(file1));
for (String[] row : resolvedData) {
StringBuilder strBuilder = new StringBuilder();
for (String col : row) {
strBuilder.append(col).append("\t");
}
}
}
}
}
}
和TSV文件类似:
sample_file1.txt
header1 header2 header3
val11 val21 val31
val12 val22 val32
sample_file2.txt
header1 header5 header3
val11 val51 val35
val14 val54 val38
tmp_collist.txt包含我需要的标题列表。它是一个包含一列的文件:
header2
header3
header9
header8
我想获取所有header1值的列表(如果可能,唯一),为所提供的标头中的每个值(它可以在文件或任何内容中)。
答案 0 :(得分:1)
我是该库的作者,只是在标题名称不匹配时发现字段选择存在问题(请参阅here)。
尝试获取最新版本(2.1.1-SNAPSHOT),当您选择输入文件中不存在的标题时,您将获得预期的结果。
希望这有帮助。