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

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

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

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

C#

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

Q&A

解決済

1回答

1576閲覧

StreamWriterの列方向出力

akirabrian67

総合スコア11

CSV

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

C#

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

0グッド

0クリップ

投稿2021/09/19 11:04

編集2021/09/19 13:21

前提・実現したいこと

StreamWriter、ボタン、テキストボックスを使い、ボタンが押される度にテキストボックス内の値とその他のデータ合計4つをCSVに列方向に出力したいです。

AAAA
BBBB
CCCC
DDDD

発生している問題・エラーメッセージ

列方向の出力はできるものの以下の例のような出力しかできません。ボタン押して列方向にデータを追加していくという上の例のようなことができません。どのようなロジックで出力することになるのでしょうか?


ABCD
ABCD
ABCD
ABCD

該当のソースコード

C#

1using (StreamWriter sw = new StreamWriter(@filename, true, Encoding.UTF8)) 2 { 3 sw.WriteLine(j); 4 sw.WriteLine(diameter); 5 sw.WriteLine(height); 6 sw.WriteLine(person); 7 }

試したこと

以下のような列方向の出力はできました。
ABCD

using (StreamWriter sw = new StreamWriter(@filename, true, Encoding.UTF8)) { sw.WriteLine(j+","+diameter + ","+height + ","+person); }

補足情報(FW/ツールのバージョンなど)

.NET Framework 4.7.2
Microsoft Visual Studio Solution File, Format Version 12.00
Visual Studio Version 16

追加情報

上記で記した例についてですがエクセルで閲覧する際の並びとなっております。

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

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

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

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

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

Zuishin

2021/09/19 11:05

テキストファイルがどういう物か知っていますか?
退会済みユーザー

退会済みユーザー

2021/09/19 11:36 編集

質問者さんの言う CSV とは何ですか? CSV = Comma-Separated Values なのですが、質問の「例」にはカンマはどこにも見当たらないのですが?
akirabrian67

2021/09/19 13:22

申し訳ありません。エクセルで閲覧をする際の話ということ記載しておりませんでした。
Zuishin

2021/09/19 13:29

いや、エクセルで閲覧しようが、テキストエディタで閲覧しようが、CSV は CSV です。 CSV はテキストファイルです。 重ねて聞きますが、テキストファイルがどういう物か知っていますか?
退会済みユーザー

退会済みユーザー

2021/09/19 14:05

話が通じてません。少なくとも他人と話が通じる程度の知識が持てるレベルまでは勉強しないと・・・
Zuishin

2021/09/19 14:21

ウェブ系の開発はしたことがあるのか。 ブラウザで閲覧しようが、vscode で閲覧しようが、HTML は同じものだろ? HTML も CSV もどっちもテキストファイル。 文字列がカンマや改行コードで区切られてるだけだから、列方向への追加がどうとかいう話にはならないんだよ。
dodox86

2021/09/20 02:06

「列方向に出力したい」と書いていたところに「列方向に出力はできるものの以下の例...」とあり、更に「以下のような列方向の出力はできた」と続き、例示と突き合せても正直、何回読んでも分かりません。A, B, C, Dと書いているのは、スプレッドシートのA列、B列...ということなのでしょうか。(だとしても分かりません) CSV形式とは既に先にご指摘をいただいているように、一般的に1行のデータに"1列目,2列目,3列目,...最後の列のデータ、で末尾に改行"のようなものを指します。1行のテキストデータを出力するときに、列方向、言うなれば横方向に1項目ずつデータを増やしていきたい、という意味なのでしょうか。
BeatStar

2021/09/20 04:05

@ 質問者さん とりあえず、「入力値」と「出力結果」(ファイル内) のそれぞれを書いた方がいいですよ。 たとえば、「textbox1には"A", textbox2には"B"が入力された場合、"A,B" とファイルに記述する。その直後にtextbox1に"2", textbox2に"1"と入力されたら"A,B", "2,1"が記述される」とかみたいに。 それを矢印(文字の)とかで表現するとか。 少なくとも今の質問内容ではよく意味がわかりません。 そもそもCSVとはなんでしょうか。(なんとなく別の意味で使っていそうな雰囲気) 「どこがわからない」のでしょうか。 回答者は質問者と同じ環境にある…わけではないので、書かないとわかりませんよ。
guest

回答1

0

ベストアンサー

csharp

1using System; 2using System.IO; 3using System.Text; 4using System.Linq; 5using System.Collections.Generic; 6 7public class Program 8{ 9 public static void Main() 10 { 11 一行ならできる(); 12 Console.WriteLine(); 13 列方向の出力はできる(); 14 Console.WriteLine(); 15 質問したかったと考えられること(); 16 } 17 public static void 一行ならできる() 18 { 19 var (j, diameter, height, person) = Sample().First(); 20 using var sw = new StreamWriter(Console.OpenStandardOutput(), Encoding.UTF8); 21 sw.WriteLine(j); 22 sw.WriteLine(diameter); 23 sw.WriteLine(height); 24 sw.WriteLine(person); 25 } 26 public static void 列方向の出力はできる() 27 { 28 using var sw = new StreamWriter(Console.OpenStandardOutput(), Encoding.UTF8); 29 foreach(var (j, diameter, height, person) in Sample()) { 30 sw.WriteLine(j+","+diameter + ","+height + ","+person); 31 } 32 } 33 public static void 質問したかったと考えられること() 34 { 35 var js = new List<string>(); 36 var diameters = new List<double>(); 37 var heights = new List<int>(); 38 var persons = new List<string>(); 39 foreach(var (j, diameter, height, person) in Sample()) { 40 js.Add(j); 41 diameters.Add(diameter); 42 heights.Add(height); 43 persons.Add(person); 44 } 45 using var sw = new StreamWriter(Console.OpenStandardOutput(), Encoding.UTF8); 46 sw.WriteLine(string.Join(",",js)); 47 sw.WriteLine(string.Join(",",diameters)); 48 sw.WriteLine(string.Join(",",heights)); 49 sw.WriteLine(string.Join(",",persons)); 50 } 51 public static IEnumerable<(string, double, int, string)> Sample() { 52 yield return ("ID01", 3.14, 15, "Adam"); 53 yield return ("ID02", 6.28, 30, "Bob"); 54 yield return ("ID03", 9.42, 45, "Charlie"); 55 yield return ("ID04", 12.56, 60, "Dannie"); 56 } 57}

投稿2021/10/15 14:54

papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問