2017-12-07 2 views
0

명령을 작성할 때 결과가 1보다 작습니다.어떻게 ipairs에서 값을 추출 할 수 있습니까?

No ID   Sub-Id    Sig Mode 
22 DarrenIm 00:00:00:1a:00  60  13n/d 
32 DarrenYou 00:00:00:1b:01  80  13n/d 

는 I는 시그 값을 추출 할 (및 SIG 값을 비교에서, I는 최고 시그 값을 얻고 싶은과 동일한 열에있는 ID를 얻으려면). 나는 그것을 시도했지만 문제가있다. 내 코드는 다음과 같습니다.

f = assert(io.popen("Here is my command")) 

local val = {} 

for line in f:lines() do 
    print(line) 
    for v in line:gmatch'[%d]%d' do 
      table.insert(val, v) 
    end 

    for i, v in ipairs(val) do 
      m = math.max(i) 
      n = m-1 
      sig = v 
      print(sig) 
    end 

print(n) 

end 

f:close() 

그러나 sig [n]을 사용하면 오류가 발생하여 값을 추출 할 수 없습니다. 그리고 그 값을 비교할 때, 나는 가장 높은 신호를 얻고 같은 칼럼에서 ID를 얻고 싶습니다. 이 문제를 해결하려면 어떻게해야합니까?

+0

해결책은 입력 문자열을 구문 분석하는 것입니다. 예를 들어 여기에서 함수를 가져옵니다. https://stackoverflow.com/questions/47655213/print-table-in-lua –

+0

감사합니다. 확인해 보겠습니다. – darren

답변

2

코드를 살펴 보겠습니다. 먼저 파일이

f = assert(io.popen("Here is my command")) 

은 다음

local val = {} 

당신은 라인으로 파일 라인을 읽을 수있는 테이블을 만들 처리 얻을, 그것은

for line in f:lines() do 
    print(line) 

당신은 각 '[%d]%d'마다 경기를 삽입 인쇄 테이블에 줄을 넣으십시오. val

for v in line:gmatch'[%d]%d' do 
      table.insert(val, v) 
    end 

이제 파일의 모든 줄을 val로 구문 분석 한 후에 만 ​​이해할 수있는 작업을 수행합니다. 그러나 이것은 여전히 ​​라인 루프 내부에있는 각 라인에 대해 수행됩니다.

for i, v in ipairs(val) do 

i는 단일 숫자의 최대 값은 무엇입니까? 그래서이 선은 말도 안돼.

  m = math.max(i) 
      n = m-1 

sig는 전역 변수입니다. 귀하의 경우 그것은 문자열입니다. 그래서 sig [n]은 테이블 값만을 인덱스 할 수 있기 때문에 에러를 줄 것이다.

  sig = v 
      print(sig) 
    end 

print(n) 

end 

f:close() 

'[% d]'문자열 패턴이 너무 의미가 없습니다. [] 문자 클래스를 만듭니다. % d은 숫자를 나타냅니다. 클래스를 단독으로 사용하면 % d을 (를) 사용하는 것과 별 차이가 없습니다.

코드는 루아에 대한 기본적인 지식이 부족함을 보여줍니다. 파일을 파싱하려고 시도하는 초보자 용 자습서를 만드십시오.

코드 구조는 실제로 작업 순서에 대해 생각하지 않았다는 것을 나타냅니다. 펜과 종이를 가지고 프로그래밍을 시작한다고 생각하십시오.

+0

나도 그렇게 생각한다. 나는 내 문제에 대해 더 많이 생각하고 또한 공부할 것이다. 감사합니다. – darren

관련 문제