teratail header banner
teratail header banner
質問するログイン新規登録

質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

2115閲覧

CSVデータの中身が空の状態で保存されるのを解決したい

kyudou-syounen

総合スコア3

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2022/01/31 08:44

編集2022/01/31 10:36

0

0

visual studio 2019 C# で現在開発を行っております。
CSVデータが中身が空のまま保存されているのを解決していただきたいです。

コードの働きとしては、センサーからの値がリアルタイムで送信され、その値がコンソール画面に表示される。自分のタイミングで”q”を押すと通信が停止されCSVデータ(今回ですと、seido1.csv)として保存されるものとなっています。

しかし、現在”seido1.csv”というファイル自体はきちんと存在しているのですが中身が空になっています。特にこれといったエラーなども表示されません。
以前、作製していた同じ内容のものを削除してしまったため再度作り直したところこのような事態となりました。

System.Text.Encoding.CodePages、System.IO.Portsは両方ともVer.6.0.0をインストールしています。

どうか皆様、お力添えしていただきたいです。
よろしくお願いいたします。

C#

1using System; 2using System.IO.Ports; 3using System.Text; 4 5namespace Csvpreserve 6{ 7 class Program 8 { 9 static void Main(string[] args) 10 { 11 //キー入力に使用 12 var outChar = ""; 13 14 //ファイルの場所(使えないけど) 15 string PATH = @"C:/Users/○○/~/ _SensorData.csv"; 16 17 18 //EncodeをShift-Jisに対応 19 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); 20 21 //シリアルポート取得(Arduinoのシリアルポート) 22 SerialPort sp = new SerialPort("COM6"); 23 24 //csv出力 25 var sw = new System.IO.StreamWriter("C:seido1.csv", false, System.Text.Encoding.GetEncoding("shift_jis")); 26 27 //Arduino側のサンプリング周波数 28 sp.BaudRate = 9600; 29 sp.Open(); 30 31 while (true) 32 { 33 //センサ値1行分取得 34 string data = sp.ReadLine(); 35 36 //csv出力 37 sw.Write(data); 38 Console.WriteLine(data); 39 40 //Q入力でプログラム終了 41 if (Console.KeyAvailable) 42 { 43 outChar = Console.ReadKey().Key.ToString(); 44 if (outChar == "Q") 45 { 46 return; 47 } 48 } 49 50 } 51 } 52 } 53} 54

【追記】
一度アプリを再起動させ//CSV出力の"sw.Write(data);"を"sw.WriteLine(data);"に書き換えて行ったところ一回目は中身があるcsvデータが保存されたのですが、二回目以降また空のデータが保存されていました。一回目と二回目で visual studio 内のコードをいじりもしていません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/01/31 08:56

デバッガを使って問題がどこにあるか切り分けしてください。それが簡単にできるのは質問者さんだけで、ここの閲覧者・回答者にはできないことと認識してください。
Zuishin

2022/01/31 08:56

クローズしてないからです。
kyudou-syounen

2022/01/31 10:30

SurferOnWww様 コメントありがとうございます。デバッグなどの検証は何度か行っているのですが、一向にエラーが出てこずこちらで質問させていただきました。現在も調べているのですが原因がわかっていません。 丸投げのような形の質問をしてしまい申し訳ございません。
kyudou-syounen

2022/01/31 10:42

Zuishin様 コメントありがとうございます。 クローズが必要になってくるのですか?質問なのですが、”return”で終了する作業はになえてはいないのでしょうか?
guest

回答1

0

ベストアンサー

StreamWriterではclose()またはDispose()を呼ばないと適切に実ファイルに書き込みが行われません。

using ステートメント (C# リファレンス) を使用しましょう。
usingのブロックを抜けるときに自動でリソースの開放(Dispose()などの処理)を実施してくれます。

C#

1using (var sw = new System.IO.StreamWriter("C:seido1.csv", false, System.Text.Encoding.GetEncoding("shift_jis"))) { 2 // swを使用した処理 3} 4

投稿2022/01/31 10:43

Y.H.

総合スコア7918

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kyudou-syounen

2022/02/01 05:24

Y.H.様 回答していただきありがとうございます。 私が求めていたことが達成できました。 usingステートメントについてこれから勉強していこうと思います。 大変お世話になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問