DOBON.NET DOBON.NETプログラミング掲示板過去ログ

複数行テキストをソースコードに内蔵

分類:[その他]

質問します。
 大きな(メモ帳くらいのサイズ)テキストボックスに、ボタンを押すと下記の文字(複数行)が入るようにしたいと思っています。自分が調べた中では、別のテキストファイルから読み出す方法しか載っていませんでした。なるべく1つのファイル(.exe)にまとめたいので、ソースコードに内蔵したいです。どなたか何かいい方法をご存じでしたらご教授願います。

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//このファイルの保存は、C# ソースファイル (*.cs) 形式で保存して下さい。

using System;
using System.Drawing;
using System.Collections;
using System.Windows.Forms;

namespace WindowsApplication1
{
public class Form1 : Form
{
private System.ComponentModel.Container components = null;

public Form1()
{
SuspendLayout();
ClientSize = new Size(300,300);
Text = "Form1";
ResumeLayout(false);
}

[STAThread]
static void Main()
{
Application.Run(new Form1());
}
}
}
>  大きな(メモ帳くらいのサイズ)テキストボックスに、ボタンを押すと下記の文字(複数行)が入るようにしたいと思っています。
> 自分が調べた中では、別のテキストファイルから読み出す方法しか載っていませんでした。
> なるべく1つのファイル(.exe)にまとめたいので、ソースコードに内蔵したいです。
> どなたか何かいい方法をご存じでしたらご教授願います。

privateなstring型の変数なり定数なりにその文字列をセットしておくだけでよいですよ。
C#で改行コードCR+LFは\r\nで表せます。
よねKENさん。レスありがとう御座いました。
 今回、調べ方が甘かったようです。申し訳ありませんでした。
 ところで、今度は別の問題点が出てきてしまいました。
 C#固有でVBには存在しない問題かと思いますが、Text = "Form1";の様な場合では、間違って";の部分で終わりという認識になってしまい、後の文字は入れられないようです。どうすればいいのでしょうか?
>  C#固有でVBには存在しない問題かと思いますが、Text = "Form1";の様な場合では、

VBの場合は基本的に1行の終わりが1文の終わりで、C#の場合は;で1文が終わりというだけで、
VBでもC#でも同じですよ。

> 間違って";の部分で終わりという認識になってしまい、
> 後の文字は入れられないようです。どうすればいいのでしょうか?

「Form1」の文字列の後にそのまま続けて、
Text = "Form1ここに文章を続ければOKです。";
のようにすればよいと思いますけど。

改行ありの文章を文字列変数に入れる方法は下記のような手があります。
@マーク付きの文字列にした場合、開発環境のエディタ上で入力した改行が
そのまま改行として扱われます。(ただし、この書き方は見づらいのでお勧めではありませんが)
s2の方法が直感的で見やすいでしょう。s3のように連続で1行で書いてもOKです。

string s1;
string s2;
string s3;
s1 = @"改行のテスト
どうでしょうか?";
s2 = "改行のテスト\r\n" +
   "どうでしょうか?";
s3 = "改行のテスト\r\nどうでしょうか?";

MessageBox.Show(s1);
MessageBox.Show(s2);
MessageBox.Show(s3);
■No915に返信(よねKENさんの記事)
> VBの場合は基本的に1行の終わりが1文の終わりで、C#の場合は;で1文が終わりというだ>けで、VBでもC#でも同じですよ。

私の誤認識でした、勝手なことを行って申し訳ありません。

> 「Form1」の文字列の後にそのまま続けて、
> Text = "Form1ここに文章を続ければOKです。";
> のようにすればよいと思いますけど。

一番上に書きました通り、";まで表示したいと思うのですが無理と言うことでしょうか?

> 改行ありの文章を文字列変数に入れる方法は下記のような手があります。
> @マーク付きの文字列にした場合、開発環境のエディタ上で入力した改行が
> そのまま改行として扱われます。(ただし、この書き方は見づらいのでお勧めではありませんが)
> s2の方法が直感的で見やすいでしょう。s3のように連続で1行で書いてもOKです。

おすすめ通り、s2の方法がベストだと思いますのでこれからはs2を使わせて頂きます。
> 一番上に書きました通り、";まで表示したいと思うのですが無理と言うことでしょうか?

もしかして文字列の中に「"」を含めたいということですか?
両端の""はその中が文字列であることを意味するため、
文字列中に「"」を含めるには一工夫必要になります。
2通りの方法があります。
1.通常の文字列の中では「\"」のように前に\マークを付けることで「"」を意味します。
2.@マーク付きの文字列の中では「""」のように2回重ねることで「"」を意味します。

例)
s4 = "Form1\"";
s5 = @"Form1""";
■No917に返信(よねKENさんの記事)
よねKENさん。レスありがとう御座いました。
以下のようなコードに仕上がりました。
教えてクンにならないように注意していきますのでこれからもよろしくお願いします。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//C# デフォルトコードの表示
private void mimC_Click(object sender, System.EventArgs e)
{
//宣言
string c;

//表示内容(ここから↓)
c = "//このファイルの保存は、C# ソースファイル (*.cs) 形式で保存して下さい。\r\n" +
"\r\n" +
"using System;\r\n" +
"using System.Drawing;\r\n" +
"using System.Collections;\r\n" +
"using System.Windows.Forms;\r\n" +
"\r\n" +
"namespace WindowsApplication1\r\n" +
"{\r\n" +
" public class Form1 : Form\r\n" +
" {\r\n" +
" public Form1()\r\n" +
" {\r\n" +
" SuspendLayout();\r\n" +
" ClientSize = new Size(300,300);\r\n" +
" Text = \"Form1\";\r\n" +
" ResumeLayout(false);\r\n" +
" }\r\n" +
" [STAThread]\r\n" +
" static void Main() \r\n" +
" {\r\n" +
" Application.Run(new Form1());\r\n" +
" }\r\n" +
" }\r\n" +
"}";
//表示内容(ここまで↑)

//デフォルトコードの挿入
txtWrite.Text = txtWrite.Text + c;
解決済み!
> //表示内容(ここから↓)
> c = "//このファイルの保存は、C# ソースファイル (*.cs) 形式で保存して下さい。\r\n" +
> "\r\n" +
> "using System;\r\n" +
> "using System.Drawing;\r\n" +
> "using System.Collections;\r\n" +
> "using System.Windows.Forms;\r\n" +
> "\r\n" +
> "namespace WindowsApplication1\r\n" +
> "{\r\n" +
> " public class Form1 : Form\r\n" +
> " {\r\n" +
> " public Form1()\r\n" +
> " {\r\n" +
> " SuspendLayout();\r\n" +
> " ClientSize = new Size(300,300);\r\n" +
> " Text = \"Form1\";\r\n" +
> " ResumeLayout(false);\r\n" +
> " }\r\n" +
> " [STAThread]\r\n" +
> " static void Main() \r\n" +
> " {\r\n" +
> " Application.Run(new Form1());\r\n" +
> " }\r\n" +
> " }\r\n" +
> "}";
> //表示内容(ここまで↑)

一応解決されているのでプラスアルファのコメントということで参考までに。

埋め込みたいものはソースコードなんですね。
ソースコードの中には記号類も多くでてきますし、
複数行というのも結構な量があるようなので\r\nも多くて見づらいですね。
こういう場合はリソースを使うとよいと思います。

埋め込みたいテキストデータを記述したファイルを用意し、そのファイルをプロジェクトに追加します。
プロパティの設定でそのファイルの「ビルドアクション」を「埋め込まれたリソース」に変更します。
VB.NETで実験したコードですが、下記のように実行中のアセンブリを取得し、
そのアセンブリのリソースを取得してそこからテキストデータを読み出します。

Dim asm As [Assembly] = [Assembly].GetExecutingAssembly()
' アセンブリ(EXE)にどんなリソースが含まれているのかを確認するためのデバッグ用ロジック
For Each ss As String In asm.GetManifestResourceNames()
Debug.WriteLine(ss)
Next

' 上のデバッグロジックで調べてみるとリソース名が「ResourceTest.Form1.txt」
' だったので、この名前でStreamを取得。
'(この実験プロジェクト名がResourceTestで、追加したファイルがForm1.txt)
Dim s As Stream = asm.GetManifestResourceStream("ResourceTest.Form1.txt")
' リソースのストリームをシフトJISで読み出し
TextBox1.Text = New StreamReader(s, Encoding.Default).ReadToEnd

DOBON.NET | プログラミング道 | プログラミング掲示板