2017-03-14 8 views
0

この質問にはMulti-level parsing text私はどのようにファイルを解析してテキストファイルにすることができますか? さらに条件を複雑にし、データをmysqlデータベースに書き込むことにしました。 元のデータは同じです。テキストファイルを解析するデータをmysqlデータベースに挿入する

私は次の含まれているテキストファイルだった:

Head 1 
Subhead 1 
a 10 
b 14 
c 88 
Subhead 2 
a 15 
b 16 
c 17 
d 88 
Subhead 3 
a 55 
b 36 
c 87 
Head 4 
Subhead 1 
r 32 
t 55 
s 79 
r 22 
t 88 
y 53 
o 78 
p 90 
m 44 
Head 53 
Subtitle 1 
y 22 
b 33 
Subtitle 2 
a 88 
g 43 
r 87 
Head 33 
Subhead 1 
z 11 
d 66 
v 88 
b 69 
Head 32 
Subhead 1 
n 88 
m 89 
b 88 
Subhead 2 
b 88 
m 43 

を今、私は次の飛行機に、このテキストを構造化する必要があります。このデータをmysqlデータベースに書きたいと思います。私の行動 :結果

require 'tiny_tds' 
current_head = "" 
current_sub = "" 
res = [] 

    @host = 'server' 
    @user = 'user' 
    @pass = 'pass' 

lines.each do |line| 
    case line 
    when /Head \d+/ 
    current_head = line 
    when /Subhead/ 
    current_sub = line 
    when /\w{1} 88/ 
    num = line 
    res << "#{current_head}, #{current_sub}, #{num}" 

    conn = TinyTds::Client.new(:host => @host, :username => @user, :password => @pass) 
    insert_string = "insert into table (head, sub, num) VALUES (#{res})" 
    conn.execute(insert_string) 

    end 
end 

、私はデータベースにのみ1行を挿入することができます。さらに、挿入プロセスは非常に遅いですが、どのようにプロセスをスピードアップできますか?

私は、データベースにこの結果を必要とする:実際には

head | Sub  | num | 
_________________________ 
Head 1 | Subhead 1| c 88 | 
Head 1 | Subhead 2| d 88 | 
Head 4 | Subhead 1| t 88 | 
Head 53| Subhead 2| a 88 | 
Head 33| Subhead 1| v 88 | 
Head 32| Subhead 1| n 88 | 
Head 32| Subhead 1| b 88 | 
Head 32| Subhead 2| b 88 | 

答えて

0

、私のバージョンは動作しますが、私は、アカウントにデータベース内のデータの型を取ることはありませんでした。誰かが私のアルゴリズムをより速くする方法を知っているなら、教えてください

+1

多分、各ループの外側に接続をセットアップしますか? – Fallenhero

関連する問題