私は解析したい情報を取得しようとしているフォルダにTSVファイルをたくさん持っています。各ファイルには異なるヘッダーを持つ異なる列がありますが、列の1つはすべてのファイルで共通です。興味のあるヘッダーのリストがテキストファイルにあります。私はそのファイルを解析しており、uniVocity解析ツールを使用して特定の列の情報を取得しようとしました。私は1つまたは2つのヘッダーで試してみましたが、ファイルのすべてのヘッダーが渡されても何も返されませんでした。TSV(テキスト)ファイルを解析して列から値を取得します
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
header1 header5 header3
val11 val51 val35
val14 val54 val38
sample_file2.txt tmp_collist.txtありヘッダーリストt帽子が必要です。それはAにすることができ(私が提供するヘッダの値のそれぞれについて、すべてのHEADER1値のリストを(ユニーク、可能な場合)、取得したいのですが
header2
header3
header9
header8
:これは、1つのカラムを持つファイルでありますファイルなど)。
一般的な列( 'header1')に基づいてテーブル(ファイル)間の結合のように聞こえます。それはあなたが必要とするものを要約するのですか? – YoYo
@YoYoはい。それだけが必要。 – pam
データベースにデータをロードして、これを達成するためにSQLを使用するか、任意のデータセットに対してSQLのような操作を提供するAPIを使用する方が便利です。それはオプションですか? – YoYo