Найдите шаблон в файле и напечатайте его в jruby
У меня есть файл с количеством строк n. Мне нужно найти поле (SessionId и его значение) в нем и распечатать его соответствующее значение.
Я закодировал доступ к файлу и распечатывал его построчно. Нужна помощь в получении поля и печати его стоимости.
Пример строки файла:
LastSessionTeardown.cc|598|Resolving:=N2BBSessionGateway.Factory
2013-12-23 06:03:22.488046 UTC VZ_QIP_S3_208 LastSessionTeardown.cc|636 <ERROR>:Failed to resolve SessionGateway:N2BBSessionGateway.Factory
Cause : user exception, ID 'IDL:omg.org/CosNaming/NamingContext/NotFound:1.0'
2013-12-23 06:03:22.488078 UTC VZ_QIP_S3_208 LastSessionTeardown.cc|640|Total resolved SessionGateways list(size):=0
2013-12-23 06:03:22.488098 UTC VZ_QIP_S3_208 LastSessionTeardown.cc|642|Out resolveSGWs::
2013-12-23 06:07:17.485959 UTC VZ_QIP_S3_208 StreamServiceMasterImpl.cc|989|In createStream::=77D23ECC4649571A367E9C314C4AA7AA
2013-12-23 06:07:17.487706 UTC VZ_QIP_S3_208 StreamServiceMasterImpl.cc|1036|StreamId: 77D23ECC4649571A367E9C314C4AA7AA **SessionId: C0A800F0DB2A::1387778933::1501** ContentId: vault22_12.mpg 1xGoid:
2013-12-23 06:07:17.505233 UTC VZ_QIP_S3_208 StreamServiceMasterImpl.cc|989|In createStream::=E30CC868325B51D288A8E2D95322B840
Примечание: файл имеет много строк выше и ниже указанного поля
Код:
require "java"
include_class "java.io.BufferedReader"
include_class "java.io.FileReader"
include_class "java.lang.String"
fileReader = FileReader.new "protocoltiming.log.txt"
bufferReader = BufferedReader.new fileReader
str = bufferReader.readLine
while str
puts str.to_s
str = bufferReader.readLine
end
Пожалуйста, помогите мне, что будет добавлено в этот код?
2 ответа
Решение
while str
str = bufferReader.readLine
session_id = str.strip.scan(/SessionId: (.+)\s/)[0][0] if str.include?("SessionId: ")
if session_id
# session_id found
else
# session_id not found
end
end
Там на самом деле нет необходимости проходить по линиям. Вы можете просто прочитать файл и использовать регулярные выражения, чтобы найти нужный текст. Но все, что подходит вашей кошке. Иногда чтение всего файла может быть действительно проблематичным, если он слишком большой.
НТН
Сделанный. это работает!
require "java"
include_class "java.io.BufferedReader"
include_class "java.io.FileReader"
include_class "java.lang.String"
fileReader = FileReader.new "StreamService.log"
bufferReader = BufferedReader.new fileReader
#puts str
str = bufferReader.readLine
while str = bufferReader.readLine
#puts str.to_s
sessionid = ""
sessionid = str.match(/SessionId:(.*)ContentId/)
if sessionid.to_s != ''
puts "Session ID = #{sessionid[1]}"
end
end