2016-05-05 6 views
1

私は解析したい情報を取得しようとしているフォルダに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つのカラムを持つファイルでありますファイルなど)。

+0

一般的な列( 'header1')に基づいてテーブル(ファイル)間の結合のように聞こえます。それはあなたが必要とするものを要約するのですか? – YoYo

+0

@YoYoはい。それだけが必要。 – pam

+0

データベースにデータをロードして、これを達成するためにSQLを使用するか、任意のデータセットに対してSQLのような操作を提供するAPIを使用する方が便利です。それはオプションですか? – YoYo

答えて

1

私はライブラリの作成者です。不一致のヘッダー名がある場合は、フィールド選択の問題が見つかりました(here参照)。

最新のバージョン(2.1.1-SNAPSHOT)を入手してください。入力ファイルに存在しないヘッダーを選択すると、期待どおりの結果が得られます。

これが役に立ちます。

+0

ありがとうございます。 2.1.1がここに記載されていないと表示されています:https://oss.sonatype.org/content/repositories/releases/com/univocity/univocity-parsers/ – pam

+0

スナップショットビルドは現在:https://oss.sonatype .org/content/repositories/snapshots/com/univocity/univocity-parsers/2.1.1-SNAPSHOT / –