2013-07-05 3 views
3

트랜스 코딩/다음/오류가 처음로드 값, 값 이후의 위치를 ​​반환, 그래서 당신은 그 다음 값로드 갈 수 있습니다 : 오류 후 위치포함 된 블록이있을 때 load/next/error를 사용하는 방법은 무엇입니까?

>> transcode/next/error to binary! " a b c " 
== [a #{2062206320}] 

을 아니면 오류가 발생하고, 값 :

>> transcode/next/error to binary! " 1a b c " 
== [make error! [        
    code: 200        
    type: 'Syntax       
    id: 'invalid       
    arg1: "integer"      
    arg2: "1a"        
    arg3: none        
    near: "(line 1) 1a b c "    
    where: [transcode]      
] #{2062206320}]       

그러나로드 값이 블록이며, 오류가 오류가 발생하는

  • 후, 블록 내부가 있다면! 블록 내부
  • 에러 값 후의 위치 및
  • 양호한 값들은 폐기된다 :

내 전류 [*] 용액이

>> transcode/next/error to binary! "[ a b 1c ]" 
== [make error! [ 
    code: 200 
    type: 'Syntax 
    id: 'invalid 
    arg1: "integer" 
    arg2: "1c" 
    arg3: none 
    near: "(line 1) [ a b 1c ]" 
    where: [transcode] 
] #{205D}] 

여기 같은 입력을 정정 문자열을 입력하고 마지막 위치에서 다시 시작하십시오. 이렇게하면 전체 블록을 다시로드하여 한 번에 가져올 수 있습니다.

더 좋은 방법이 있나요?

는 [*]를 'transcode의 각 인스턴스를 호출하는 루프를 가정하고 여기 https://github.com/IngoHohmann/rebol3-tools/blob/master/load-all.r3

답변

1

참조, 당신은 블록 문자 []()을 처리하기 위해 자신의 메커니즘 트랜스 앞에 수 있습니다. 그런 다음 올바른 블록을 조정할 책임이 있지만 데이터를로드하는 것이므로 데이터를로드하는 것이므로 어쨌든 균형이 맞지 않은 블록 구분 기호를 처리해야 할 수 있습니다. 당신이 필요로하는 것

모든 트랜스 코딩과 같은 일을하는 메커니즘이지만, 블록 구분 기호에 대한 :

물론
block-transcode: func [source [binary!] /local symbol][ 
    if parse source [ 
     any space ; space should be defined 
     copy symbol [#"[" | #"]" | #"(" | #")"] 
     source: to end 
    ][ 
     reduce [symbol source] 
    ] 
] 

,이 경로에서 괄호 내에서 블록을 확인하지,하지만 그것은 시작이다. ..