콘솔에서 printfn
기능과 마찬가지로 읽을 수있는 내장 기능이 있다면 누구에게 알 수 있습니까? 지금까지 본 유일한 방법은 System.Console.Read()
을 사용하고 있지만 printfn
과 같은 구조를 사용하는 것만 큼 기능적으로 느껴지지 않습니다.F에서 콘솔에서 읽기
답변
그런 내장 기능이 없다는 것은 참으로 수치스러운 일이다. 그러나 Brian이 Benjol의 대답에 대한 언급에서 언급했듯이 scanf
함수를 직접 빌드 할 수 있습니다. 단지 %s
자리가 구현되어 있지만, 여기에 하나가 sscanf
변형을 정의하는 방법의 빠른 스케치,이다 :
open System
open System.Text
open System.Text.RegularExpressions
open Microsoft.FSharp.Reflection
let sscanf (pf:PrintfFormat<_,_,_,_,'t>) s : 't =
let formatStr = pf.Value
let constants = formatStr.Split([|"%s"|], StringSplitOptions.None)
let regex = Regex("^" + String.Join("(.*?)", constants |> Array.map Regex.Escape) + "$")
let matches =
regex.Match(s).Groups
|> Seq.cast<Group>
|> Seq.skip 1
|> Seq.map (fun g -> g.Value |> box)
FSharpValue.MakeTuple(matches |> Seq.toArray, typeof<'t>) :?> 't
let (a,b) = sscanf "(%s, %s)" "(A, B)"
let (x,y,z) = sscanf "%s-%s-%s" "test-this-string"
아는 한, 아니오.
그것은 TryParse의 코드 골프 :
가 그것은'printfn' 기능 자체는 컴파일러 마법에 의존하는 수치 - 당신은 당신의 자신의 F 번호'sscanf를을 만들 수 없습니다 '꽤 좋은. –
당신은 그것을 할 수 있다고 생각합니다. 유일한 마술은 문자열 리터럴을 PrintfFormats로 강제 변환 할 수 있다는 것입니다. let pf() : PrintfFormat <_, _, _, _> = "% d % s" – Brian
조합에 대한 편리 할 것() 및 분할/정규식은 "상자에서"사용할 수있는 것입니다.
P. 나는 http://www.codeproject.com/KB/recipes/csscanf.aspx을 보았고 작동한다;)
- 1. 콘솔에서 임의의 문자열 읽기
- 2. 콘솔에서 알 수없는 길이의 문자열 읽기
- 3. 설정되지 않은 경우 콘솔에서 Makefile 변수 읽기
- 4. F에서 Bigint를위한 제곱근 #
- 5. F에서 OpenCV 사용 #
- 6. NoRM을 사용하여 F에서 MongoDB에 액세스 #
- 7. 하스켈에서 F # - f에서 재귀 타입 선언 #
- 8. F에서 이름이 .base 인 이름 공간에 액세스 #
- 9. f에서 찾을 수없는 메서드 또는 개체 생성자 #
- 10. 콘솔에서 Cassini를 실행하십시오.
- 11. 콘솔에서 int를 읽는 중
- 12. 간단한 루비 '또는'질문 콘솔에서
- 13. 콘솔에서 CanCan을 테스트하려면 어떻게해야합니까?
- 14. 콘솔에서 여러 스레드 관리
- 15. 콘솔에서 Windows 서비스 실행
- 16. 자바 콘솔에서 색상 변경
- 17. 문제는 콘솔에서 우분투
- 18. 콘솔에서 java 실행
- 19. 어떻게 콘솔에서 시간을 표시합니까?
- 20. 콘솔에서 순수 텍스트 형식 odt 파일을 받으십시오.
- 21. F에서 새 형식의 public static 메서드로 인용을 컴파일하는 방법
- 22. Windows 콘솔에서 LOCALE을 설정하는 방법
- 23. link_to 스크립트/콘솔에서 작동하지 않습니다.
- 24. 이상한 콘솔에서 Ruby 오류가 발생했습니다.
- 25. IronPython 콘솔에서 화면을 지우려면 어떻게합니까?
- 26. 콘솔에서 레일스 로그인을 테스트하려면 어떻게해야합니까?
- 27. Grails 콘솔에서 TagLib 함수 호출하기?
- 28. 콘솔에서 읽는 방법은 무엇입니까? - 리눅스
- 29. cakephp : 케익 콘솔에서 l10n 사용
- 30. 델타 인덱싱 전용 콘솔에서 작업
더 완성이 필요할 때 버전의'sscanf'를 사용하면이 코드를 쉽게 확장 할 수 있습니다. 여기에 결과를보십시오 : http://fssnip.net/4I – wmeyer
@wmeyer - 정말 끝내줍니다! – kvb
@wmeyer : 이걸 FSharpx에 기부 하시겠습니까? https://github.com/fsharp/fsharpx –