2017-02-14 4 views
0

Javaを使用して、多くの* .logファイルから特定の情報を取得するのが難しい場合があります。私はこのフォーラムを調べるのに数時間を費やしましたが、私は必要なものは見つけられませんでした。 まず最初に、これらの情報を入手してコンソールに表示したいのですが、必要な情報がすべて正しく動作していることを確認してください。 * .logファイルから データは以下のこの種です:Javaを使用してtxtファイルから特定の情報を読み込み/取得する方法

public class ReadingDataTxt { 

public static void main(String[] args) { 

    String dir = "F:\\XPTO"; 

    File file = new File(dir); 

    for (String arq : file.list()) { 
     if (arq.endsWith(".log")) { 
      System.out.println("--------->" + arq + "<---------"); 
      try { 
       System.out.println(reading(dir + "\\" + arq)); 
      } catch (Exception e) { 

      } 
     } 
    } 
} 

private static String reading(String dir) throws Exception { 
    String line = " ", content = " "; 
    BufferedReader br = new BufferedReader(new FileReader(new File(dir))); 
    while ((line = br.readLine()) != null) { 
     if (!line.isEmpty()) { 
      content = new StringBuilder(content).append(line.concat("\n")).toString(); 

     } 
    } 

    br.close(); 
    return content; 
} 

}

Date Logged:  10-22-2014 11:11:00 AM 
Task Name:  PROJECT_X_X00_SPI3 
User ID:  Operator Mode 
System:   PP/PS Series FlashCORE 
Machine ID:  12345678910 

Device:   MACRONIX MX25L6473EM2 SO8 
Data Source:  X:\XPTO\PROJECT\BINARYFILE.bin 
Sumcheck:  12345678 
Process:  Continuity/Blank Check/ID Check/Erase/Program/Verify/Auto Secure/Mark/Vision 
Process Status:  Job Begin Status: New Job, Job End Status: Stopped 
TLWin Session ID: <none> 

Job Start Time:  10-22-2014 03:38:57 AM 
Job End Time:  10-22-2014 11:11:00 AM 
Devices Total:  5051 
Devices Passed:  5041 
Devices Failed:  10 
Overall Device Yield: 99.80% 

Task Description: MX25L6473EM 

Nominal Throughput: 722 dph 
Job Throughput:  679 dph 

ここで私は* .logファイルからすべてのデータを読み取るために作られたコードです私が必要とする最も重要な情報は、最初の文字列の先頭のデータ(強いハイライト)です。 Date Logged:10-22-2014 タスク名:PROJEC T_X_X00_SPI3 デバイス:マクロニクスMX25L6473EM2 SO8 デバイス合計: デバイスが失敗しました: デバイス全体の収量:99.80パーセント

第二のステップは、配置するためにCSVファイルを作るだろうこれらの情報をデータベースに格納する。

ありがとうございます!

+2

何を達成したいですか? –

+0

入手する必要がある情報は? – Prasath

+0

ファイルを読み込んで印刷するには、ファイル全体をメモリに読み込まないでください( "content"変数を参照しています)。 1行ずつ印刷できます。 –

答えて

0

擬似コード
どちらかあなたが使用することができますStringBuilder自体、必要な文字列を生成するには、以下の解析ロジックを提供します。ループの外にStringBuilderを定義していることを確認してください。
OR

あなたはマップMap<String, String> data = new HashMap<>();を取り、必要なキー/値(秒)で、それを移入することができます。あなたが鍵で他の方法でそれを抽出できるように。

は現在、各ラインのために、あなたは

String[] tokens = line.trim().split(":"); 
if(tokens.length >= 2){ 
     data.put(tokens[0].trim(), tokens[1].trim()); 
     // or append to stringbuilder 
} 

を行うことができますまた、あなたはまた、あなたがマップに入れたい特定のトークン(キー)のみのためにそこにチェックを入れることができます。

+0

こんにちはShubham、おかげでいくつかの情報を共有します。あなたのコードを変更しました。チェックしてください: 'String [] tokens = line.trim()。split(": "); \t \t \t \t IF(tokens.length> = 2){ \t \t \t \tストリングdataLogged =トークン[0]。 \t \t \t \t String taskName = tokens [1]; \t \t \t \t文字列デバイス=トークン[2]; \t \t \t \t String deviceTotal = tokens [3]; \t \t \t \t String devicePassed = tokens [4]; \t \t \t \t String deviceFailed = tokens [5]; \t \t \t \t文字列yield = token [6];\t \t \t \t map.put(dataLogged.trim()、taskName.trim()、device.trim()、deviceTotal.trim()、devicePassed.trim()、deviceFailed.trim()、yield.trim() ); ' –

+0

@EvertonWcks配列、文字列分割などのようなこの問題に関わる基本的な概念については、最初に読むことをお勧めします。 –

+0

ありがとう。 –

0

Grok ParserのJava versionを使用できます。パターンを定義することができ、パターンに一致するファイル内のすべての行が解析されます。

関連する問題