Lua读取文件

--cat sql


--fileName = "./ECNS/CGPV100R006C01SPC300/Init_ch.sql"
destFile = "cat.sql"

BUFFSIZE = 1024

files = {
		  ddl = "Table.sql",
		  cns = "./ECNS/CGPV100R006C01SPC300/Init_ch.sql",
		  cgp = "./EME/V100R001C00B100/Init_ch.sql",
		  nodeb = "./ENODEB/eBBU530V100R001C00IDC00/Init_ch.sql"
		}
fileList = {
		 "Table.sql",
		  "./ECNS/CGPV100R006C01SPC300/Init_ch.sql",
		  "./EME/V100R001C00B100/Init_ch.sql",
		  "./ENODEB/eBBU530V100R001C00IDC00/Init_ch.sql"
		}



dfile = assert(io.open("cat.sql","w"))


------------------------write file-------------------
do
function writeFile(str)

   local dfile = assert(io.open("cat.sql","w"))

			dfile:write(str)

			dfile:close();
end

end

----------read list_--------------------------

do

function list_iter(t)
   local i = 0
   local n = table.getn(t)
   return function ()
     i = i+1
	 if i<= n then return t[i] end
	end
end

end

-------------read file---------------------------

do

function readFile(fileName)


	local file = assert(io.open(fileName,"r"))


	while true do

		local lines, bytes = file:read(BUFFSIZE,"*line")

		if not bytes then break end

		--io.write(string.format(bytes))
		--local str = string.format(string.byte(bytes))

		 --print(lines)

		 dfile:write(lines)


    end
    file:close()
end

end

-------------------- clal function------------


for element in list_iter(fileList) do

	 --print(element)

	 readFile(element)

end
dfile:close()


### 使用Lua读取文件并批量截取字符串字段 在Lua中,可以使用`io.open`函数读取文件内容,并通过`string.sub`或模式匹配来截取指定位置的字符串[^2]。以下是一个完整的解决方案,展示如何读取文件中的多行内容并批量截取指定字段。 #### 文件读取与字符串截取 假设文件`data.txt`的内容如下: ``` ID:1001, Name:Project_A ID:2002, Name:Project_B ID:3003, Name:Project_C ``` 以下是实现代码: ```lua -- 打开文件 local file = io.open("data.txt", "r") -- 以只读方式打开文件 if not file then print("无法打开文件") return end -- 逐行读取并处理 for line in file:lines() do -- 定位"ID:"后的起始位置 local start_pos = string.find(line, "ID:") + 3 -- 定位","前的结束位置 local end_pos = string.find(line, ",") - 1 -- 截取ID字段 local id = string.sub(line, start_pos, end_pos) print("截取的ID:", id) end -- 关闭文件 file:close() ``` #### 动态定位字段 如果需要更灵活地提取字段,可以使用模式匹配[^1]。例如,提取`Name`字段: ```lua -- 打开文件 local file = io.open("data.txt", "r") if not file then print("无法打开文件") return end -- 逐行读取并使用模式匹配提取字段 for line in file:lines() do local _, _, name = string.find(line, "Name:(.+)$") -- 匹配"Name:"后的所有字符 if name then print("提取的Name:", name) end end -- 关闭文件 file:close() ``` #### 处理中文字符 当文件包含中文字符时,需要特别注意字节长度的问题。可以结合`utf8.len`和`utf8.sub`来正确处理[^3]。例如: ```lua -- 打开文件 local file = io.open("data.txt", "r") if not file then print("无法打开文件") return end -- 逐行读取并处理中文字符 for line in file:lines() do -- 假设需要提取从第5个字符到第10个字符(UTF-8编码) local utf8_start = 5 local utf8_end = 10 local result = utf8.sub(line, utf8_start, utf8_end) print("截取的UTF-8结果:", result) end -- 关闭文件 file:close() ``` --- ### 注意事项 1. 确保文件路径正确,且文件存在。 2. 如果文件较大,建议分块读取以节省内存。 3. 在处理中文字符时,需明确字符编码是否为UTF-8。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值