2017-03-15 13 views
1

私は、ユーザーがコンソール(ファイルの内容を文字リストに読み込んで文字列に変換する)で読むことができる文字を含むテキストファイルを持っています。ユーザーがcharリストの1文字を変更できるようにしようとしています。しかし、私はループを行い、charリストを含む変数にアクセスし、それをループし、後で同じ変数(または新しい変数)に保存して、ユーザーに承認を表示する必要があります。同じループを実行することによって文字を再び変更することができます。F# - 前回の印刷されたテキストを保存する

私の問題は、変数を可変にすることなく、文字リストを含む変数を変更する方法が見つからないことです。この問題の提案はありますか?上記の私のコードの実装に見られるように

  while true do    
       Console.Write("\n\nDo you want to change some tokens? press 1 or 2 to end: ") 
       let rep = Console.ReadLine() |> int 
       if rep = 1 then 
        Console.Write("\n\n Enter the token you will change in the text : ") 
        let user = Console.ReadLine() |> char 
        let k1 = user 
        Console.Write("\n Enter your token you will replace TO : ") 
        let user2 = Console.ReadLine() |> char 
        let k2 = user2 
        let t = finalList 
        let finalList2 = swap t k1 k2 
        let f2 = finalList2 |> charListToString 

        printfn "%s" f2 

、私は一度だけのリストを変更することができ、ループが再び実行された場合、それは前に変更された最初の値を失うことになります。

答えて

3

これは最善の解決策ではないと主張していませんが、あなたの質問に基づいて、これはあなたが達成しようとしているものだと思います。文字列内の文字による簡単な検索と置換?

ここでは、ユーザーが押したキーの再帰関数と内部パターンの一致を使用するソリューションです。それはあなたが開始し、.fsxファイルに入れ、fsxファイルのコマンドラインでfscを呼び出すと、結果のexeを呼び出して、それが何をするかを見ることができます。

open System 

let rec change (data : string) = 
    printfn "\n1 to make changes or 2 to quit" 
    let keyPressed = Console.ReadKey() 
    match keyPressed.KeyChar with 
    | '1' -> 
    printfn "\nEnter the character in the string you want to change:" 
    let changeChar = Console.ReadKey().KeyChar 
    printfn "\nEnter the character to change to:" 
    let changeTo = Console.ReadKey().KeyChar 
    let newData = data.ToCharArray() |> Array.map (fun c -> if c = changeChar then changeTo else c) |> String 
    printfn "\n%s\n" newData 
    change newData 
    | '2' -> data 
    | _ -> change data 

[<EntryPoint>] 
let Main args = 
    printfn "\n%s\n" <| change "abc" 

    0 
+0

回答ありがとうございますが、私はすでにこの問題を認識していました。ユーザーがリスト内の文字を一度変更した後、ユーザーは変更されたリストを好きなように変更し続けることができるはずです復号化する。 –

+1

私はトークンと文字のリストを使用しているところで復号化しようとしています。テキストファイルがはっきり読めるようになるまで、必要な試行回数を入力することで、ファイル内のすべてのトークンと文字を変更することができます。私はすでにすべての関数と入力を計算していますが、ユーザーが最初の試行で文字を変更してから2回目に試してみると、最初に変更された文字が復元され、新しい文字が変更されます。しかし、私は、ユーザーが残りの文字を変更し、コンソールで新しい結果を更新することができるようにしたい。 –

+0

私が知る限り、それはMr.氏の解決策とまったく同じです。あなたはそれを実行しようとしましたか? –

関連する問題