2012-02-25 19 views
-2

私はSQLデータベースにインポートしたいいくつかのテキストファイルを持っています。データはコンマで区切られていないので、コンマでデータをインポートするという私の考え方に従わない。ただし、データは複数の行にまたがっています。以下のテキストファイルの例を参照してください。どのように私はプログラムされた平均値、シフト番号などの特定のデータをインポートすることができます助言誰も助けてください?テキストファイルをSQLデータベースにインポート

enter image description here

答えて

-1

あなたは、正規表現を使用してファイルの内容を解析一行にそれを回す、そして必要な場合、セミコロンを挿入するためにC#で簡単なアプリケーションを書くことができます。

0

マシンで生成されたレポートがあるようです。理想的なアプローチは、マシンに別のレポートを作成させることです。つまり、 '/////'のないレポートや、インポートするデータだけです。そのため、新しいレポートの出力は次のようになります。実際に

shift_num, prog_min, mean_sec, att_sec, adt_min 
1, 600, 599, 658, 210 
... 

、しかし、それはそのようなレポートを取得するには、多くの場合、「可能」ではありません。 (つまり、マシンではが常にですが、しばしば人間は嫌です)。そのときは、好きなテキスト処理言語を使用してレポートを使用可能なデータに変換します。

私はこの種のもののためにawkが好きです。 perlのようなもの


説明するために、このレポートのレプリカをキー入力しました。 (test.datとして保存されています)

ORDER Nr FG68909     Q.ty Ordered 99 
... 
             SHIFT Nr. 1 

//////// 
PROGRAMMED       MEAN 

600 min      JOB TIME  599 sec 




AVERAGE Turnaround Time 658 sec 
AVERAGE Delivery Time 210 mins 

私はこのawkプログラムを書きました。レポートのレイアウトについては、多くの前提があります。それらのうちのいくつかはおそらく実際のデータに失敗するでしょう。

/SHIFT/ {shift = $NF} 
/JOB TIME/ { 
    programmed = sprintf("%d %s", $1, $2); 
    mean = sprintf("%d %s", $(NF-1), $NF); 
} 
/AVERAGE Turnaround/ { avg_turnaround = sprintf("%d %s", $(NF-1), $NF);} 

# Assumes the line "AVERAGE Delivery" is also the end of the record. 
/AVERAGE Delivery/ { 
    avg_delivery = sprintf("%d %s", $(NF-1), $NF); 
    printf("%d, '%s', '%s', '%s', '%s'\n", shift, programmed, mean, avg_turnaround, avg_delivery); 
    # Clear the vars for the next record. 
    shift = ""; 
    programmed = ""; 
    mean = ""; 
    avg_turnaround = ""; 
    avg_delivery = ""; 
} 

出力です。 。 。

$ awk -f test.awk test.dat 
1, '600 min', '599 sec', '658 sec', '210 mins' 
+0

コンマを使用してデータをインポートできますが、スペースの数や固定長を調べてデータをインポートするなどのことはありますか? – Blob

+0

はい、* I *は固定幅のデータをインポートできますが、OPは固定幅のデータをインポートできます。しかし、彼は固定幅データを持っていません。彼はファイルに保存されたレポートを持っています。 –

+0

こんにちは、私はまだこれと苦労しており、AWKとAWKAを研究しましたが、まだ失われています。私は各チュートリアルや、各テキストファイルから特定のデータを抽出する簡単な方法があるのだろうかと思っています。ありがとう – Blob

関連する問題