将每个单独的矩阵分成一个单独的文件

时间:2019-05-02 13:50:38

标签: lua

file.csv,其中存储了n个矩阵。例如,

   A  B  C
A  0  3  4
B  5  0  7
C  7  8  0

   A  B  C  D
A  0  3  4  5 
B  5  0  7  9
C  7  8  0  5
D  7  8  6  0

所有矩阵都用空白行分隔。

我想将每个单独的矩阵分成一个单独的文件(1.csv,2.csv ... n.csv)。请帮我。谢谢。

2 个答案:

答案 0 :(得分:0)

这是一种可能性。仅数据部分保存在CSV中。如果需要标题,则需要在save_csv()中添加一些代码。 data字符串中的示例数据。您可以通过将data加载到所需的任何文件来对其进行初始化。

data = [[

   A  B  C
A  0  3  4
B  5  0  7
C  7  8  0



   A  B  C  D
A  0  3  4  5
B  5  0  7  9
C  7  8  0  5
D  7  8  6  0


]]

--------------------------------------------------------------------------------
local cc = table.concat
--------------------------------------------------------------------------------
function save_csv(filenumber,t)
  io.open(filenumber .. '.csv','w'):write(cc(t,'\n')):close()
end
--------------------------------------------------------------------------------
local filenumber = 1
local ans = {}

for line in (data..'\n'):gmatch '(.-)\n' do
  local s = {}
  for item in line:gmatch '%d+' do s[#s+1] = item end
  if #s > 0 then
    ans[#ans+1] = cc(s,',')
  elseif #ans > 0 then
    save_csv(filenumber,ans)
    filenumber = filenumber + 1
    ans = {}
  end
end

答案 1 :(得分:0)

因此,这应该完全可以满足您的要求。

又快又脏

-- read lines
local files, data = {}
for line in io.lines('file.csv') do
  if (line == '') then
    if data then table.insert(files, data) end
    data = nil
  else
    data = (data and (data .. '\n') or '') .. line
  end
end

-- last file
if data then table.insert(files, data) end

-- write files
for i = 1, #files do
  local f = io.open(i .. '.csv', 'w')
  f:write(files[i])
  io.close(f)
end