爲什麼string.find
在這種情況下返回零?string.find換行
local str = -- some string with several lines
local pos = string.find(str, "\r\n")
我敢肯定,該字符串包含新行序列\ r \ n。
我甚至嘗試尋找\ r,\ n也\\r\\n
。
關閉模式匹配沒有幫助
編輯:字符串str
從文件加載。
爲什麼string.find
在這種情況下返回零?string.find換行
local str = -- some string with several lines
local pos = string.find(str, "\r\n")
我敢肯定,該字符串包含新行序列\ r \ n。
我甚至嘗試尋找\ r,\ n也\\r\\n
。
關閉模式匹配沒有幫助
編輯:字符串str
從文件加載。
一些字符串,多行
如果這是使用Lua的[[]]
語法完成,那麼生成的Lua字符串不會有\ r \ n在他們的,即使你保存的Lua文件作爲Dos文本。這符合Section 2.1 of the Lua Reference manual。
所以你從文件中加載字符串。 Lua使用C標準io進行文件訪問。您的io.open
或多或少會撥打fopen
。並且fopen
默認爲進行文本翻譯,所以它會將\ r \ n轉換爲\ n。如果你不想要這個,那麼你需要在Section 5.7 of the Lua Reference manual中說明的後綴io.open
的「模式」字符串與「b」。
爲什麼你甚至想要搜索\ r \ n呢?爲什麼不只是搜索\ n?
不,字符串實際上是從文件加載的。 – mnn
你在使用什麼操作系統,以及你打開文件的模式(第二個參數爲io.open
)?如果你打開它作爲文本('r'
或'w'
模式說明符沒有b
- 如果未指定,io.open
將使用'r'
),Windows將從文件文件句柄讀取時轉換所有'\r\n'
實例爲'\ n',所以你想要尋找'\n'
。
如果你真的需要Windows來保存'\r\n'
,你必須包括二進制符當您打開文件,以抑制這種轉換:
local file = io.open('filename.txt','rb') --note the 'b'
-1:不提供足夠的代碼重現該問題,並指示問題是用string.find而不是文件讀取。 – BMitch
你到底在讀什麼文件?你在下面說過,你沒有使用io.open()。 –
字節,以字節爲單位,因爲遊戲引擎不公開直接函數從遊戲數據文件中提取文件。所以,我必須親自動手。 – mnn