首先,讓我道歉,因爲我知道沒有關於紅寶石。我可以通讀代碼並理解發生了什麼,但從未寫過任何代碼。幫助紅寶石腳本,(如果行包含,忽略)
我有一個腳本,我們用它來解析一些很久以前從別人那裏獲得的日誌文件。
# format the csv data into an sql insert query
def FormatToSQL(file_name)
$logger.info(caller) { "creating SQL insert q's" }
formatted_data = []
data_lines = []
open("#{LOCAL_DIR}/#{file_name}") { |f| data_lines = f.readlines }
data_lines.each do |r|
data = []
rdata = r.split(' ')
rdata.each { |e| data.push("'#{e}'") }
data.unshift('DEFAULT')
sql_data = data.join(',')
formatted_data.push(sql_data)
end
return(formatted_data)
end
# -------------------------------------------------------------------
# -------------------------------------------------------------------
# M A I N
$logger = Logger.new("//var/www/metaquery/calllogger.log", 3, 1024000)
$logger.info(caller) { "start" }
now = Time.now().gmtime() - 3600 ## files are name using UTC
file_name = sprintf("calllog_%s_%02d_%02d_%02d.log", now.year, now.month.to_i, now.day.to_i, now.hour.to_i)
if(doSFTPPull(file_name)) then
ConnectDB()
formatted_sql = FormatToSQL(file_name)
formatted_sql.each { |sql| $local_conn.query("insert into #{DB_TABLE} values(#{sql})") }
else
# we did not download the new file, report to ???
false
end
$logger.info(caller) { "normal end" }
# -------------------------------------------------------------------
日誌包含成千上萬的記錄行,像這樣
2xx3xx2xx7 2xx3xx56xx 07/28/11.19:55:45 19:55:46 20:00:00 2 4092 - - N - - TER - A T -
但是,我們啓用了一些新的QoS數據統計,並增加了線路這樣,
VQM: 2xx3xx00xx 08/12/11.13:02:07 - - - - 20ms 0 0
我想添加一條語句以忽略以VQM開頭的分段,因爲這會在MySQL插入時拋出列計數,最終導致查詢失敗,從而導致腳本失敗。
我該如何實現這個目標?同樣,對於成爲一個完整的紅寶石Noob抱歉。我只是一個PHP的傢伙,甚至沒有那麼好。大聲笑
我知道,該地區可能必須在 data_lines.each do | r |
其中代碼將是,並可能是如果/然後與一些正則表達式。謝謝你的幫助!
或者更簡潔地說:'如果旁邊R =〜/^VQM /' – Phrogz
@Phrogz是啊,這太:)我永遠記得這反過來等號和波浪走在運營商:/ – Skilldrick
@Skilldrick:一個辦法記得是認爲'=〜'開頭'=',因爲它比較兩個字符串不modyfing他們,而運營商則像'+ ='或'* ='都在左側,將修改離開 – Mchl