我需要从命令kine(cmd)中获取3个参数我写了以下内容并收到错误:
$findings= pg_query($connection, "
insert into tbl_profile_picture(id,name,emp_id)
values ((SELECT COALESCE( max(id),0)+1 FROM tbl_profile_picture),'$link1','".$_SESSION['id']."')
");
我知道我需要解析参数(3个字符串)。
当我尝试从命令行运行3个文件时我得到的错误:索引超出了数组的范围......
有人可以帮我吗??
由于
答案 0 :(得分:7)
从您粘贴的命令行中,您似乎忘记在命令行的第二条和第三条路径之间添加空格 - 您有两个""
紧挨着彼此。您还应该注意到,在打印出第一个参数args.[0]
时,您会看到由单个"
连接的两个路径
至于使代码更健壮:无论语言是什么,访问数组元素而不首先检查数组的长度是一个坏主意。通过数组模式匹配,F#为您提供了一次完成长度检查和元素访问的好方法:
match args with
| [| xmlP; excelFormatP; excelP |] ->
let result = functionParseXmlToExcel(xmlP , excelFormatP , excelP)
printfn "Completed with %A" result
0
| _ ->
failwithf "Expected 3 commandline arguments, but got %i arguments" args.Length
我强烈建议您阅读pattern matching in general - Scott正确地将其称为“F#的主力”。
答案 1 :(得分:2)
您需要确定传递的参数数量,以及实际解析它们的方式,以及您调用的函数如何接收它们。因此,显示functionParseXmlToExcel
的函数签名也是一个好主意。请参阅下面的一个非常简单的示例:
let myExcelFunction(param1,param2,param3) =
printfn "%A" param1
printfn "%A" param2
printfn "%A" param3
[<EntryPoint>]
let main argv =
printfn "%A" argv
let parseParams (argv:string []) =
let param1,param2,param3 = argv.[0],argv.[1],argv.[2]
myExcelFunction(param1,param2,param3)
match argv.Length with
| 3 -> parseParams argv |> ignore
| _ -> failwith "You need to pass three parameters!"
0 // return an integer exit code
要获得更完整的解决方案,您可以调查Argu。