ファイル名を引数として渡すには3通りの方法があります。コンパイルされたプログラムでargv
を使用する場合は、fsiで実行している場合はfsi.CommandLineArgs
を使用し、最後にConsole.Readline
でファイル名の引数を取得してください。これを行うためにクラスを定義する必要はないので、削除して関数にしただけです。また、関数を読み込むコードを単純化することができます。コンパイルされたプログラムargv
で
バージョン1
をメインに、文字列のリストとして渡されます。
open System.IO
[<EntryPoint>]
let main argv =
let fName = argv.[0] // get the file name as the first argument
let readData (fName:string) =
use stream = new StreamReader(fName)
let mutable valid = true
printfn "Please enter the number you want to search for: "
let mutable x = System.Console.ReadLine()
let mutable lines = 1
while (valid) do
let line = stream.ReadLine()
if (line = null) then
valid <- false
else if (line = x) then
printfn "String found: %s" x
printfn "Found on: Line %i " lines
valid <- false
else
lines <- lines + 1
readData fName
System.Console.ReadKey() |> ignore
0 // return an integer exit code
あなたはこのように、アプリケーションをコンパイルした後、これを実行します:
.\ConsoleApplication13.exe "c:\tmp\SearchText.txt"
を
バージョン2
コンパイルしたいが、ちょうどFSIを通してそれを実行しない場合:私はので、それを綴るませんバージョン3のために
Fsi.exe .\Script1.fsx "C:\tmp\SearchText.txt"
:あなたはこのように、これを実行します
open System.IO
let fName = fsi.CommandLineArgs.[1] // you need the second item from the argument list,
//because the first one is the script name itself
let readData (fName:string) =
use stream = new StreamReader(fName)
let mutable valid = true
printfn "Please enter the number you want to search for: "
let mutable x = System.Console.ReadLine()
let mutable lines = 1
while (valid) do
let line = stream.ReadLine()
if (line = null) then
valid <- false
else if (line = x) then
printfn "String found: %s" x
printfn "Found on: Line %i " lines
valid <- false
else
lines <- lines + 1
readData fName
System.Console.ReadKey() |> ignore
0 // return an integer exit code
検索文字列を取得するのにすでにConsole.Readline
を使用しています。ファイル名はまったく同じ方法で取得できます。
x
も変更可能である必要はありません。
何を試しましたか?あなたの目標は何ですか(期待される結果)?あなたはどんな特定の問題に遭遇しましたか? –
あなたが何を求めているのかは不明です。私は、ファイルパス(ここでは 'D:\ Searcher.txt')がコマンドラインパラメータとして渡される実行可能プログラムでこのコードを実行させることを推測できます。あれは正しいですか? – TeaDrivenDev