2017-01-15 10 views
0

現在、txtファイルを使用してそのファイルの数字の表を列1の数値、列の別のリスト2など数字以外の文字列からすべての文字を削除する

txtファイルの構造上、数字からリストを作成するのに問題はありません。問題は、txtファイルから作成された文字列から無関係な部分を削除する方法です。今のよう

マイコード:

let mutable s = "" 

let readerStream = System.IO.File.OpenText "x.txt" 
let readFile (stream : System.IO.StreamReader) = 
    while not(stream.EndOfStream) do 
     let mutable line = stream.ReadLine() 
     s <- s + sprintf "%s" line.ToLower() 
    stream.Close() 

readFile readerStream 
s <- s.[3600..1253900] 
printfn "%s" s 
printf "%A" (String.length s) 

私の最初のアプローチは、数字以外の文字のすべてのインスタンスを削除するためにString.Replaceを使用することでしたが、それはすぐに厄介だと、私は気づいたテキスト列の上下にも数値が含まれているため、そのアプローチは役に立たなくなります。

上記のように、txtファイルはすべて同様の構造を持っています。つまり、3番目の最後の行に表示されているようにインデックスを作成して無関係なテキストの大部分を取り除くことができます。次にString.Replaceを使用して、私には役に立たない。このアプローチは確かにうまくいきますが、これを行うよりスマートな方法があるかどうか疑問に思っていました。

質問を理解しやすくするために、これらのtxtファイルの1つを添付しました。

数値の開始と終了の前に、キーワード「$$ EOE」があります。これで、この事実を利用する方法はありますか?

+0

「私はこれらのtxtファイルのうちの1つを添付しました」と、添付されたテキストファイルはどこですか? –

答えて

2

テキストファイルがなくても答えが出にくいです。すぐにアップロードすると思います。私はそれを刺すだろうが、説明とコードは実際に今は一致しない。

私が提供できるものは、コンパイルからそれを防ぐいくつかの小さな空白の問題があり、不要ないくつかの変数があります。そして、私は文字列の連結の数が非常に多いためa StringBuilder

let sb = StringBuilder() 

let readerStream = System.IO.File.OpenText "x.txt" 
let readFile (stream : System.IO.StreamReader) = 
    while not(stream.EndOfStream) do 
     let line = stream.ReadLine() 
     line.ToLower() |> sb.Append |> ignore 
    stream.Close() 
readFile readerStream 
let s = sb.ToString().[3600..1253900] 
printf "%s" s 
printf "%i" (String.length s) 

あなたがファイルの内容を投稿するとき、私は他のアプローチについて考えていきます。

+1

私はちょうど答えとしてそれを受け入れるだろうが、しばらくの間、私の頭を壁に打ちつけた後、私はそれを理解した。 お時間をいただきありがとうございました。本当に素敵です:) –

関連する問題