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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

1回答

602閲覧

C#でstring型の変数に対して$を使用した文字列補間を有効にする方法が知りたいです。

sssyssss

総合スコア1

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2022/08/04 19:28

前提

C#でFile.ReadAllLines関数を使用してCSVファイルから情報を抜き出し、
Split関数で分割し、扱う機能を実装しようとしました。
その際にCSVファイル中に○○○○{▽▽}○のようなテキストを保存したが、
その情報を格納するstring型の文字列補間を有効にできない

実現したいこと

string型の変数に$を先頭に着けたときのような文字列補間を行えるようにしたい。
・例
string型 iue = "いうえ", kiue = "きくけ"
といった変数があり、
CSVファイル( 1,あ{iue}お,か{kiue}こ ) のようなデータを読み込んだ際に
それぞれに[あいうえお]と[かきくけこ]といった様な文字列補間を行えるようにしたい。

少し調べたところ、$を使用した文字列補間にはコンパイルが通るかをちゃんと確認する機能があるとありました。
そのため、このような状況で文字列補間を行うとその確認ができなくなるためそもそもが不可能なのではないかと考えましたが、
出来ないなら出来ないではっきりさせたいです。よろしくお願いします。

該当のソースコード

C#

1 public static List<string[]> csvLoad(string fileName) 2 { 3 List<string[]> ret = new List<string[]>(); 4 string[] lines = File.ReadAllLines("./data/" + fileName + ".csv"); 5 for (int i = 1; i < lines.Length; i++) 6 { 7 ret.Add(lines[i].Split(',')); 8 } 9 return ret; 10 }

試したこと

・$変数名
・$""+変数名
・$"{変数名}"
・$"{$変数名}"
・$"${変数名}"

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

visual studio 2022
net6.0

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/08/04 21:44 編集

自分でコードを書けばいかようにもできると思いますが、それは選択肢にないのですか? PS 質問者さんの考えているコード内での「文字列補完」は何をどうしようと 100% 不可能・・・とまで言い切る自信はありませんが、それに近いぐらいの無理筋だと思いますので、自力でコードを書いて対応することをお勧めする次第です。
退会済みユーザー

退会済みユーザー

2022/08/04 21:53

質問の本題とは関係ありませんが、フィールドの中に改行コードとかカンマが含まれる場合、質問のコードのやり方ではたちまち破綻します。そういうケースがあるなら、 TextFieldParser などの csv パーサーを使うことをお勧めします。
guest

回答1

0

ベストアンサー

補間文字列($"")は、コンパイル時String.Format等に変換されています。
$ - 文字列補間 - C# リファレンス | Microsoft Docs

ファイルから読み込んだ文字列が{iue}を含んでいるからと言って、(実行時に)何か起きるわけでも起こせるものでもありません。

{iue}を含んでいるとわかっているなら、単純に置換すればいいのでは?

cs

1string iue = "いうえ", kiue = "きくけ"; 2string s = "1,あ{iue}お,か{kiue}こ"; 3 4s = s.Replace("{iue}", iue).Replace("{kiue}", kiue); 5Console.WriteLine(s);

もっと凝ったことがしたいとか速度が気になるとかだったら、テンプレートエンジンの利用を検討したほうがいいかもしれません。
c# template engine - Google 検索


読み込んだ文字列をString.Format等の、書式指定文字列に使うことはできます。
しかし場所や順番は指定できますが、何を入れるかは指定できません(ので今回の目的には使えませんね)
複合書式指定 | Microsoft Docs

投稿2022/08/04 22:08

TN8001

総合スコア9317

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問