前提
初心者です。
csvファイルから英単語、日本語、発音記号を読み込んで、以下のようにコンソール画面に出力したいです。
fabricate
(…を)組み立てて製造する
[fˈæbrɪkèɪt]
revoke
取り消す、廃止する
[rɪvóʊk, rɪvˈəʊk]
violate
犯す、破る
[vάɪəlèɪt, ˈvaɪʌleɪt]
csvファイルは以下のようになっています。
csv
1fabricate,(…を)組み立てて製造する,[fˈæbrɪkèɪt] 2revoke,取り消す、廃止する,[rɪvóʊk, rɪvˈəʊk] 3violate,犯す、破る,[vάɪəlèɪt, ˈvaɪʌleɪt]
試したC#コード
C#
1using System; 2using System.Collections.Generic; 3using System.IO; 4using System.Linq; 5 6internal class Program 7{ 8 static void Main(string[] args) 9 { 10 StreamReader sr = new StreamReader(@"読み込むcsvファイルのパス"); 11 12 var lis1 = new List<string>(); 13 while (!sr.EndOfStream) 14 { 15 string line = sr.ReadLine(); 16 lis1.Add(line); 17 } 18 19 string split = String.Join(",", lis1); 20 Console.WriteLine(split); 21 22 var lis2 = new List<string>(); 23 lis2 = split.Split(',').ToList(); 24 25 for (int i = 0; i < lis2.Count; i += 3) 26 { 27 Console.WriteLine(lis2[i]); //英語 28 Console.WriteLine(lis2[i+1]); //日本語 29 Console.WriteLine(lis2[i+2]); //発音記号 30 } 31 } 32} 33
発生している問題
以下、出力結果。
fabricate
(…を)組み立てて製造する
[f?abr?ke?t]
revoke
取り消す、廃止する
"[r?vo?k
r?v???k]"
violate
犯す、破る
"[v???le?t
?va??le?t]"
・発音記号に含まれる" , "によって英語、日本語、発音記号がうまく分離できない。
・発音記号が文字化けしている。
知りたいこと
・プログラム中の" lis2 "のリストを作ったうえで、前提に書いたように出力したいです。
・文字化けの対処法が知りたいです。
よろしくお願いいたします。
補足情報
visual studio 2022
OSはWindowsでいいですか?
それと、ファイルの文字コードは何ですか?
もしかするとファイルの文字コードの問題か、OSの設定によるものかもしれません。
ヒント: https://otona-life.com/2022/06/10/121615/amp/
カンマが余計なところに含まれているのは CSV として正しくないので、修正が必要です。
abc,def を二つに分けたくないなら、"abc,def" としなければなりません。
当然これは Split によって単純に分けることはできないので、ダブルクォーテーションで囲まれたところを除いて分割するようなプログラムにしなければなりません。
文字化けするのは、コンソールその他もろもろが Unicode 対応していないからでしょう。
対応させてください。
windowsです。
文字コードはメモ帳で確認したところ、UTF-8(BOM付き)でした。
csv を保存するときのコードは何ですか?BOMはありますか?
しまった、リロードしたら回答がありましたね
ボムありの方でやってみてください。もしそれでできないならOS側の設定かも?
質問者さん、無言ですが、回答されているのでそれらに対するフィードバックを返してください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったならどこがダメかを書くとより期待に近い回答が出てくるかも。とにかく無言は NG です。
返信が遅れて申し訳ありません。
文字化けですが、回答いただいたように実行しましたら、解消しました。また、発音記号の分離ですが、csvを書き換えることができる仕様でしたので、書き換えることで解決しました。
回答していただいた皆様、ありがとうございました。
回答4件
あなたの回答
tips
プレビュー