2016-09-26 50 views
1

晚上好,打開文件與盧阿skript

我目前工作的一個PROGRAMM是獲取信息從文件到數據庫,用於測試目的我使用了通過IO經典的方式打開Testfiles:

function reader (file, delimeter) 
    local f = io.open(file) 
    for line in f:lines() do 
     lines[count] = splitty(line, delimeter) 
     count = count + 1; 
    end 
end 

(這部分也containes分離器的第一部分)

但在實際環境中,數據庫PROGRAMM imediatly移動與名稱變更爲另一個目錄中的文件,比如這個:

$30$15$2016$09$26$13$27$24$444Z$.Pal.INV.csv 

現在我知道目錄,但我不能真正預知名稱,所以我想知道是否有可能在不知道名稱的情況下打開文件的方式。 (和閱讀這些條款後刪除)

我有想法,使用修改鏈接:

local inputFile = "D:\\Directory\\(*all)" 

,但失敗了。

其他可變信息: 該系統到目前爲止只在Windows PC上計劃。 該目錄將始終只包含準備好的一個文件,而不包含其他文件。

+0

我不明白系統的要點。 1.爲什麼名字不能是靜態的和已知的。 2.擁有單個文件的目錄有什麼意義? – warspyking

+0

所有這些問題的核心是Datastudio,它應該管理整個數據,從讀出文件,將數據存儲到數據庫,然後將所需數據傳送到需要它們的進程,可悲的是,任何接近就緒或智能設計的地方,例如缺少定製閱讀模式的選項(理解日期是什麼,對象名稱是usw),我必須通過解決方法來解決這個問題。 數據庫所做的是重命名它在觸發目錄中獲取的文件,而我的工具必須讀取它,所以我需要讀取重命名的文件。 – Etaila

回答

1
-- directory name and file name should consist of ASCII-7-bit characters only 
local dir = [[C:\Temp\New Folder]] 
local file = io.popen('dir /b/s/a-d "'..dir..'" 2>nul:'):read"*a":match"%C+" 
if not file then 
    error"No files in this directory" 
end 
-- print the file name of first file in the directory 
print(file) --> C:\Temp\New Folder\New Text Document.txt 
+0

仍然提供無意義的,短暫的答案我看到xD – warspyking

+0

@warspyking - 無效的答案?真? Qui habet aure audiendi audiat。 –

+0

我指的是缺乏解釋來幫助他們理解它是如何工作的。 – warspyking

2

您可以使用LuaFileSystem的迭代器lfs.dir遍歷目錄的內容。一個小例子:

local lfs = require("lfs") 

local path = "D:\\Directory\\" -- Your directory path goes here. 
for filename in lfs.dir(path) do 
    print(filename) -- Work with filename, i will just print it 
end 

如果保留文件的記錄,你就可以知道哪一個是新的。如果它只有一個文件,那麼它會更容易,你可以用string函數檢查擴展名。從我記得的迭代器包括...lfs documentation can be found here.

+0

一個非常好的和有效的方法,在ZeroBraneStudio中試用過它,但遺憾的是編譯器在實際的Datastudio中沒有LuaFileSystem庫,所以我不得不使用另一個,但是如果包含librarys是一個選項,那麼這個選項肯定會更好。 – Etaila