2014-11-10 4 views
2

Red binding을 사용하여 파일을 읽고 쓰고 하드 코딩 된 파일 이름 버전이 제대로 작동합니다. 하지만 커맨드 라인에서 파일 이름을 동적으로 가져 오려고합니다. Red에는 현재 그러한 유틸리티가 없습니다. 그래서 Red/System으로 만들려고합니다. 이제 커맨드 라인 인수를 얻을 수는 있지만, 그것을 Red 부분으로 전달하는 방법을 모르겠습니다. ! 당신이 빨간색을 반환하는 루틴을 작성하는 문자열 필요가있다 읽기에 그 인수를 가정하면Red 파일의 Red/System 부분에서 값을 가져 오는 방법

Red [] 

#include %input-output.red 

#system-global [ 
    args: system/args-list 
    args: args + 1 
    source-file: args/item 
    args: args + 1 
    target-file: args/item 

    print [source-file target-file ] 

] 

data: read source-file 
probe data 
write target-file data 

답변

2

뭔가 그냥 일상적인 기능에 # 시스템 - 글로벌 코드를 변환, 작동합니다 :

Red [ 
    File: "test-read.red" 
] 

read-arg: routine [ 
    files [block!] 
    /local 
     str [red-string!] 
     args [str-array!] 
][ 
    args: system/args-list 
    args: args + 1 

    str: string/load symbol/duplicate args/item 1 + length? args/item UTF-8 
    block/rs-append files as red-value! str 

    args: args + 1 
    str: string/load symbol/duplicate args/item 1 + length? args/item UTF-8 
    block/rs-append files as red-value! str 
] 

probe read-arg [] 

다음 번 컴파일,이 결과를 얻어야한다 :

C:\Dev\Red>test-read fileA fileB 
["fileA" "fileB"] 
1

와 함수를 작성 : 아래의 예와 같이, 나는 readwritesource-filetarget-file을 통과해야 -끈! 레드/시스템 C 문자열!

Nenad가 Red 1.0으로 작업하기 때문에 Red API가 아직 문서화되지 않은 것 같습니다. 이것은 다른 방법으로가는 함수, 문자열입니다! ~에 C - 문자열! 필요한 것이 무엇인지 밝히는 데 도움이 될 수 있습니다 - https://github.com/PeterWAWood/Red-System-Libs/blob/master/UTF8/string-c-string.reds.

누군가가 제안 할 수있는 레드 API를 사용하는 더 쉬운 방법이있을 수 있습니다. 이 같은

관련 문제