read lines
 

News:

29 December 2022 - PtokaX 0.5.3.0 (20th anniversary edition) released...
11 April 2017 - PtokaX 0.5.2.2 released...
8 April 2015 Anti child and anti pedo pr0n scripts are not allowed anymore on this board!
28 September 2015 - PtokaX 0.5.2.1 for Windows 10 IoT released...
3 September 2015 - PtokaX 0.5.2.1 released...
16 August 2015 - PtokaX 0.5.2.0 released...
1 August 2015 - Crowdfunding for ADC protocol support in PtokaX ended. Clearly nobody want ADC support...
30 June 2015 - PtokaX 0.5.1.0 released...
30 April 2015 Crowdfunding for ADC protocol support in PtokaX
26 April 2015 New support hub!
20 February 2015 - PtokaX 0.5.0.3 released...
13 April 2014 - PtokaX 0.5.0.2 released...
23 March 2014 - PtokaX testing version 0.5.0.1 build 454 is available.
04 March 2014 - PtokaX.org sites were temporary down because of DDOS attacks and issues with hosting service provider.

Main Menu

read lines

Started by sphinx_spb, 08 November, 2007, 20:09:52

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

sphinx_spb

Help me with this code...
I want to read lines from log file, but apply filter to them.
I need not all lines, but only lines that contain given nick.
Logfile format is:
[2007_11_08 05:59] <user1>(10.27.42.206) hello
[2007_11_08 05:59] <user2>(10.179.99.250) hi

The command '+mlog 2007_11_08' works fine and read all lines.
And '+mlog 2007_11_08 user1' isn't work - again read all lines.
I think the error is in function loadtext, marked by --[[   ]]  but I don't know how to fix.

The code follows:

function getFullLogs(sUser,arg)
	local _,_,f, fdate,fnick = string.find(arg, "%b<>%s+%p(%S+)%s+(%S+)%s+(%S+)");
	msg=""
	logtype = F_MainLogPath..fdate.."_mainchat.log"
	msg = msg..loadtext(logtype,fnick).."\r\n"
	BotSayToUser(sUser,msg )
	return 1	
end

function loadtext(filename,nick)
	local message = ""
	local list = {}
	local f = io.open( filename, "r" )
	if f then
		message=f:read("*all")
	--[[
			if nick ~= nil then
				for line in f:lines() do
					if string.find(line,nick) then table.insert(list,line); end
				end
				message=list
			end
	]]
		f:close()
	end
	return message
end

CrazyGuy

try this

function loadtext(filename,nick)
	local list = {}
	local f = io.open( filename, "r" )
	if f and nick then
		for line in f:lines() do
			if string.find(line,nick) then table.insert(list,line) end
		end
		f:close()
	end
	return list
end

sphinx_spb

Big thanks CG and Mutor, works fine! 8)

bastya_elvtars

If it's 500% sure that the file exists, you ought to take io.lines() into consideration.
Everything could have been anything else and it would have just as much meaning.

CrazyGuy

that code looks familiar, I wonder why...  :P

SMF spam blocked by CleanTalk