2017-06-09 3 views
0
file, _ := os.Open("x.txt") 
    f := bufio.NewReader(file) 

    for { 
     read_line, _ := ReadString('\n') 
     fmt.Print(read_line) 


     // other code what work with parsed line... 
     } 

終わり...golangの行から nを削除するにはどうすればよいですか?それが最後の行だけで動作する、エンド・プログラムが動作するように、すべての行に nを追加

例を入れてください、私は何が私が私のために働くここにいない見つける何あらゆるソリューションを終了してみてください。

+3

ここで質問する方法を理解するには[ヘルプ]をしばらくお待ちください。例えば、十字タグ付けではありません。 – GhostCat

+0

改行は追加されません。改行はファイル内にあります。 [ReadStringのドキュメント](https://golang.org/pkg/bufio/#Reader.ReadString)から、 "ReadStringは入力の最初のdelimが出現するまで読み込み、データを含む文字列を返します。デリミタ。"それは*まさにそれが行うことを*行うことになります。 – Adrian

答えて

4

あなたは最後の文字切り取ることができます、あなたはファイルライン・バイ・ラインを読みたい場合は

read_line = strings.TrimSuffix(read_line, "\n") 
+0

動作しません:(read_line [:len(read_line) - 1]評価されましたが使用されていません – tseries

+0

結果を使用する必要があります:read_line = read_line [:len(read_line)+1] –

+0

.warpwallet2.go:72:undefined:strings文字列の中にある.TrimSuffix インポートを追加する必要がありますか?申し訳ありません。文字列を追加するには、文字列を追加する必要があります。/ – tseries

3

read_line = read_line[:len(read_line)-1] 

おそらく、より良いアプローチは、文字列ライブラリを使用することですがbufio.Scannerを使用すると簡単になります。スキャナにはendline\nまたは\r\n)が含まれません。あなたがendlineを削除したい場合は

file, err := os.Open("yourfile.txt") 
if err != nil { 
    //handle error 
    return 
} 
defer file.Close() 

s := bufio.NewScanner(file) 
for s.Scan() { 
    read_line := s.Text() 

    // other code what work with parsed line... 
} 

が、私はつまり、あなたがTrimRightFunc使用することをお勧め

read_line = strings.TrimRightFunc(read_line, func(c rune) bool { 
    //In windows newline is \r\n 
    return c == '\r' || c == '\n' 
}) 

更新: @GwynethLlewelynで指摘したように
、単純に(きれい)になりますTrimRightを使用して、すなわち

read_line = strings.TrimRight(read_line, "\r\n") 

Internall y、TrimRight関数呼び出しTrimRightFuncを返します。そして、それがTrimRightの2番目の引数として指定された文字と一致する場合、文字を削除します。

+1

'read_line = strings.TrimRight(read_line、 "\ r \ n") '? –

+0

@GwynethLlewelynあなたは正しいです。私は 'TrimRight'関数を誤解しました。それが* 2番目の引数と完全に一致すれば、文字列を削除すると思った。 – putu

+0

ああ、私はちょうど私が初心者のGopherであり、時には明白ではない方法で優れた理由があることから尋ねました。説明をありがとう。 –

関連する問題