我有一个模仿F#touch命令的基本F#CLI,我的程序采用文件名,如果文件存在则创建文件,或者如果文件不存在则更新访问时间。
已经完成了核心功能,但是应该在语法上模仿Linux命令Touch。语法应为“ touch file1.text”(用于创建文件)或“ touch --version”(用于在指定选项时要打印的消息)。
我的核心问题是: 1.让我的代码遵循Linux的语法-
当前->>> Test.text =已创建文件。
预期->>>触摸test.txt或
touch --version =已创建文件或打印了触摸命令信息。
当前结果
test.txt //创建文件 0 //
预期
touch test.text //创建文件 0 // 要么 预期 touch --version / touch --help / *触摸信息 触摸信息 触摸信息 触摸信息* /
尝试使用Argu库,但似乎超出了我当前的范围,目前正在尝试使用参数解析器模块。
// Learn more about F# at http://fsharp.org
open System
open System.IO
open System.Text
type filename = String
let touch path =
//Console.ReadLine()
if File.Exists path
then File.SetLastWriteTime(path, DateTime.Now)
else
if not(File.Exists path)
then File.WriteAllText(path, " ")
Console.ReadKey()|>ignore
[<EntryPoint>]
let main argv =
printfn "Touch Command - Built using F#"
printfn "Please enter the file you want to touch"
if argv |> Array.contains "Help " then
printfn "Display help here"
exit(0)
printfn "Version information"
exit(0)
for filename in argv do
touch(filename)
0
// return an integer exit code
```
Current result
> test.txt // File created
> 0 // internal
Expected
>touch test.text //file created
>0 //internal
or
Expected
>touch --version / touch --help
>/* Touch information
Touch information
Touch information
Touch information*/
No current errors
When argu library attempted, to many errors to bring to solution board.
答案 0 :(得分:1)
argv
是一个字符串数组,因此判断--help
或--version
是否在该数组中的最简单方法是使用Array.contains
函数:
[<EntryPoint>]
let main argv =
printfn "Argv: %A" argv // Helpful in debugging, remove in final version
if argv |> Array.contains "--help" then
printfn "Display help here"
exit(0)
if argv |> Array.contains "--version" then
printfn "Version information"
exit(0)
for filename in argv do
touch(filename)
请注意,此示例假设您重写touch
函数以使用filename
参数,而不是通过Console.ReadLine
从控制台读取文件名。
还要注意,在[<EntryPoint>]
之类的属性之后,无需添加第二级缩进。该属性应该与正在修改的let
声明在同一级别缩进。因此,您应该在模块的顶层(即缩进为零)编写let main argv =
行。