LinuxでSwiftのコードが書いているのですが、
行数をカウントする(改行文字をカウントする)プログラムをglibcを使って書いたところ、実際の2倍の値が返ってきてしまいます。
原因がわかる方がおられましたら、ご教授いただけないでしょうか?
カウントしているファイルの文字コードはUTF-8です。
3,4ファイル試しましたが、全て綺麗に2倍でした。
###カウントしている関数
swift
1func do_cat(filePath: String) { 2 var fd: CInt 3 var buf = Array<UInt8>(repeating: 0, count: Int(BUFSIZ)) 4 var n: Int 5 var count: UInt8 = 0 6 //"10" is return code by ASCII 7 let target: UInt8 = 10 8 9 10 fd = open(filePath, O_RDONLY) 11 12 if fd < 0 { die(s: filePath) } 13 while true { 14 n = read(fd, &buf, Int(BUFSIZ)) 15 if n < 0 { die(s: filePath) } 16 for i in buf { 17 if i == target { count = count + 1 } 18 } 19 if n == 0 { 20 print(count) 21 break 22 } 23 } 24 if close(fd) < 0 { die(s: filePath) } 25} 26
なんとなくtargetに使用している"10"が原因なのかな、とは思いますが
原因がわからず、もやもやします。
"10"を指定している理由ですが、UTF-8はASCIIに含まれる文字はASCIIと同じ、と
いう記事がどこかにあったので、UInt8で10を指定しています。
また、UTF-8の改行文字を指定する方法が見つからなかったのも理由の一つです。
下記の環境を使用しています。
- Arch Linux
- Swift 4.0.3
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/08 12:38
2018/01/08 14:10