LUA의 텍스트 파일을 일종의 테이블과 같은 변수로로드하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1891473

  •  19-09-2019
  •  | 
  •  

문제

파일을 LUA의 변수에로드해야합니다.

내가 얻었다 고 가정 해 봅시다

name address email

각각 사이에 공간이 있습니다. 그러한 줄의 x -many가 어떤 종류의 객체에로드 될 텍스트 파일이 필요합니다. 또는 적어도 한 줄은 문자열을 공백으로 나눈 끈으로 절단해야합니다.

LUA에서 이런 종류의 직업이 가능하며 어떻게해야합니까? 나는 Lua를 처음 접했지만 인터넷에서 관련된 것을 찾을 수 없었습니다.

도움이 되었습니까?

해결책

UROC의 답변을 확장하려면 :

local file = io.open("filename.txt")
if file then
    for line in file:lines() do
        local name, address, email = unpack(line:split(" ")) --unpack turns a table like the one given (if you use the recommended version) into a bunch of separate variables
        --do something with that data
    end
else
end
--you'll need a split method, i recommend the python-like version at http://lua-users.org/wiki/SplitJoin
--not providing here because of possible license issues

그러나 이것은 당신의 이름이 그 안에 공간을 가지고 있다는 경우를 다루지 않습니다.

다른 팁

당신은 읽고 싶어합니다 루아 패턴, 그것은의 일부입니다 문자열 라이브러리. 다음은 예제 기능 (테스트되지 않음)입니다.

function read_addresses(filename)
  local database = { }
  for l in io.lines(filename) do
    local n, a, e = l:match '(%S+)%s+(%S+)%s+(%S+)'
    table.insert(database, { name = n, address = a, email = e })
  end
  return database
end

이 기능은 Nonspace로 구성된 세 가지 하위 문자열을 가져옵니다 (%S) 캐릭터. 실제 함수는 패턴이 실제로 일치하는지 확인하기 위해 약간의 오류를 확인할 수 있습니다.

입력 파일의 형식을 제어 할 수있는 경우 설명대로 LUA 형식으로 데이터를 저장하는 것이 좋습니다. 여기.

그렇지 않은 경우 사용하십시오 IO 라이브러리 파일을 열고 다음을 사용하십시오 문자열 라이브러리 처럼:

local f = io.open("foo.txt")
while 1 do
    local l = f:read()
    if not l then break end
    print(l) -- use the string library to split the string
end
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top