Ich habe eine Reihe von TSV-Dateien in einem Ordner, den ich versuche zu analysieren und einige Informationen zu erhalten. Jede Datei hat verschiedene Spalten (mit unterschiedlichen Headern), aber eine der Spalten ist in allen Dateien eindeutig. Ich habe eine Liste von Kopfzeilen, die mich interessieren, in einer Textdatei. Ich analysiere diese Datei und versuche, das uniVocity-Parsing-Tool zu verwenden, um die Informationen dieser bestimmten Spalten zu erhalten. Es funktionierte, als ich mit einem oder zwei Headern versuchte, aber nichts zurückgibt, wenn alle Überschriften in der Datei übergeben werden.Parse TSV (Text) -Dateien und Werte aus einer Spalte
Hier ist mein Code:
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");
}
}
}
}
}
}
und die TSV-Dateien sind wie:
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 hat Kopfzeilenliste t Was ich brauche. Es ist eine Datei mit einer Spalte:
header2
header3
header9
header8
Ich möchte eine Liste erhalten (wenn möglich, einzigartig) aller header1 Werte, für jeden der Wert in den dafür vorgesehenen Header (es ist in einem sein kann Datei oder irgendetwas).
Es klingt also wie ein Join zwischen Tabellen (Dateien) basierend auf einer gemeinsamen Spalte ('header1'). Fasst das zusammen, was du brauchst? – YoYo
@YoYo Ja. Das ist was ich brauche. – pam
Es scheint mir bequemer zu sein, die Daten in die Datenbank zu laden und dazu SQL zu verwenden oder APIs zu verwenden, die SQL-ähnliche Operationen auf beliebigen Datensätzen anbieten. Ist das überhaupt eine Option? – YoYo