2023/09/06(Wed) 14:38:27 編集(投稿者)
■No102347 (まさ さん) に返信
> 書き込む時は、日付、時間、データ1(0.0001とか)、データ2(100とか)
> private string filePath = @"C:\test\Data保存\" + DateTime.Now.ToString("yyyyMMdd") + ".csv";
> private void SaveDataToCSV(string date1, string date2, string data1,string data2)
> {
> try
> {
> using (StreamWriter sw = File.AppendText(filePath))
> {
> sw.WriteLine($"{date1},{date2},{data1},{data2}");
> }
> }
> catch (Exception ex)
> {
> MessageBox.Show("Error: " + ex.Message);
> }
> }
>
> 読み込む時は日付毎にまとめています
>
> private void ParseCSVFile(string filePath, Dictionary<DateTime, double> dailyTotals)
> {
> foreach (string line in File.ReadLines(filePath))
> {
> string[] fields = line.Split(','); // カンマで分割
> string dateString = fields[0];// 日付を取得します(日付がA列にある場合)
> DateTime date;
>
> if (DateTime.TryParseExact(dateString, "yyyy/MM/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
> {
> double value;
> if (double.TryParse(fields[2], out value)) // C列値
> {
> if (dailyTotals.ContainsKey(date))// 日付毎に集計
> {
> dailyTotals[date] += value;
> }
> else
> {
> dailyTotals[date] = value;
> }
> }
> }
> }
> }
>
> 以上になります
実際に
2015/02/13,08:34,1.2345,123
2016/03/13,11:06,2.2345,223
のようなCSVデータをExcel編集前後でParseCSVFileで読ませてみましたが、
別段エラーは発生しませんでした。
ただし、Excel編集後はCSVの内容がDictionaryに入りませんね。
TryParseExactで、日付フォーマットを "yyyy/MM/dd" で決め撃ちしてるから、
2016/03/13が2016/3/13 となったりしたら、そこで失敗します。
[カスタム日時形式文字列]
https://learn.microsoft.com/ja-jp/dotnet/standard/base-types/custom-date-and-time-format-strings
フォーマットに何を指定すればよいのかは、ここを見て自分で考えてみてください。
Excel編集前後で、自分の作成したCSVデータがどう変化するか突き合わせたり、
デバッグ実行して読み込み処理でブレークポイント設定して調べてみれば、原因はすぐ判る筈です。
きちんと自分でデバッグしましょう。
[超初心者でもわかるデバッグ方法]
https://learn.microsoft.com/ja-jp/visualstudio/debugger/debugging-absolute-beginners?view=vs-2022&tabs=csharp
ただ、結論から言うとCSV処理は真面目に実装するとそれなりに面倒な処理なので、私はCSV処理の自作自体をおすすめしません。
CsvHelperを使用出来るなら使用してください。