困ったー

WIN10・アプリ・ゲームで困ったことを調べてみた

「こまったー」は困ったことを調べたブログです。

コロナ対策 |  Teams |  ARK |  Satisfactory |  フォートナイト

スポンサーリンク


【Visual Studio 2019】C#で文字やファイルを扱うには?

Visual Studio 2019でC#を利用する場合、文字やファイルの操作をどう行うかについてまとめていきます。

文字の操作

alphabet

 

文字を作成する

定番の文字操作はStringという形式の変数を作り、そこに文字を代入します。

文字はダブルクォーテーションで両端を区切ります。

String str = "OK";

 

文字列を複数つなげる場合は+でつなげれば大丈夫です。

String str = " 桜の" + "花びらたち";

 

数値データをつなげることもできます。

int i = 2008;

String str = " 桜の" + "花びらたち" + i;

 

また、変数を複数つないで文字を作る場合には以下のような書き方もできます。

int iLen = 198;
int iWeight = 158;
String str= string.Format("白鵬 翔の身長は{0}、体重は{1}。", iLen , iWeight );

 

文字の長さを取得する

文字オブジェクトで「Length」で取得できます。

 

String s="火星の男にあきたところよ";

int iLen= s.Length;

MessageBox.Show("result:" + i);

 

文字に含まれているか判定する

文字オブジェクトで「contains」を使うと判定できます。

以下なら含まれているので「true」が返ってきます。

String s = "地球の男にあきた?";
MessageBox.Show("result:" + s.Contains("男"));

 

文字を分割する

文字の分割は、人によっては良く使うことでしょう。例えばCSVファイルを読み込んで、改行マークや句読点で数値を切り出す....といった場合などです。

 

セパレートするための文字(空白や句読点など)の配列を作ります。

もとになる文字列で「Split」という関数を使うと、文字の配列として格納できます。

 

string sSource = "1,22,333";
char[] cSeparator= new char[] {','};
string[] sResult = sSource.Split(cSeparator);

 

以下の方法などで配列を確認してみましょう。

foreach(var s in sResult )
{
  MessageBox.Show(s);
}

 

 

数値と文字の変換

プログラムでエラーが起きやすいケースの一つが型変換です。

ソース内で先に明示的に型変換をしてから処理したほうが後々トラブルは少なくなると思います。

 

数値を文字にするには「ToString」を使います。

int i = 1;
string s = i.ToString();
MessageBox.Show(s);

 

文字を数値にするには「Parse」を使います。

String s = "100";
int i = int.Parse(s);
MessageBox.Show("result:" + i);

 

 

ファイルのまとめ

William and Holly in Westlake

Visual Studio 2019を使っていて面倒なので調べたことなどをまとめていきます。

 

ファイルを読み込む

ファイルを読むには「System.IO.StreamReader」を使います。

ファイル名と文字エンコードの種類をしてからファイルを読み込みます。

 

String fileName = @"c:\_work\sample.txt";
System.IO.StreamReader sr = new System.IO.StreamReader(fileName, 
System.Text.Encoding.GetEncoding("shift_jis"));
String s = sr.ReadToEnd();
sr.Close();

 

 

 

iniファイルを使う

プログラムを作る場合、設定の一部をiniファイルのように外部ファイルにしておくと後々の変更が楽です。

 

C#の場合、WinAPIからGetPrivateProfileStringを利用可能にします。

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern int GetPrivateProfileString(
string lpApplicationName,
string lpKeyName,
string lpDefault,
StringBuilder lpReturnedstring,
int nSize,
string lpFileName);

 

あとはセクション名、キー、初期値、iniファイルのパスを渡して値を読み込むことができます。

public string GetValue(string section, string key, string defaultvalue, string filePath)
{
StringBuilder sb = new StringBuilder(256);
GetPrivateProfileString(section, key, defaultvalue, sb, sb.Capacity, filePath);
return sb.ToString();
}

 

iniファイルは以下のように記述します。

[]がセクション名です。gameセクションのgameModeの値を取得すると「test」とかえってきます。先頭に#をつけると、その行は無視されます。

[game]
gameMode=test
full=0
debug=0
# buffer=1000

 

iniファイル自体はプロジェクトへ組み込んで置き、プロパティで「出力ディレクトリにコピー」から「常にコピー」まはた「新しい場合コピー」にしておきます。

これでプロジェクト内のiniファイルを編集すると、ビルド後のバージョンでもそれと同じ内容のiniファイルが使えるようになります。

f:id:apicode:20190730105725p:plain

 

 

ファイルの読み込みがうまくいない?

ファイルの読み込みは、「ファイルのパス名が違う」「ファイルが破損等で読み込めない」 などのエラーが起きやすいです。

 

そこでtry、catch型の構文を使って、エラーが起きた時の処理を書いたり、最終的には開いたファイルをちゃんとクローズするといった処理を書けるようにしましょう。

 

 

 String fileName = @"c:\_work\sample.txt";
System.IO.StreamReader sr = new System.IO.StreamReader(fileName, 
System.Text.Encoding.GetEncoding("shift_jis"));
try{ String s = sr.ReadToEnd();
 }
catch (Exception)
{
MessageBox.Show("エラー!");
}
finally
{
if (sr != null)
{
sr.Close();
}
}

 

 

 

[C#関連記事]

  1. 【Visual Studio 2019】C#の始め方 - 困ったー
  2. 【Visual Studio 2019】C#のエラーと対策 - 困ったー
  3. 【C#】ツールボックス 一覧 - 困ったー
  4. 【Visual Studio 2019】C#で文字やファイルを扱うには? - 困ったー
  5. 【Visual Studio 2019】C#で画像やサウンドを扱うには? - 困ったー
  6. 【Visual Studio 2019】C#で動画を制御するには?ビデオ入力表示は?
  7. 【Visual Studio 2019】C#でインターネット関数の使い方 - 困ったー
  8. 【Visual Studio 2019】C#で顔認識や日本語解析のサンプル - 困ったー
  9. 【Visual Studio】C#からMySqlの使い方 接続するには?SQL文を実行するには? - 困ったー

 

[Visual Studio 2019関連記事]

  1. Visual Studio 2019 無料で使うには?ダウンロードするには? - 困ったー
  2. 【Visual Studio 2019】インストーラ作成のまとめ アイコンは?.NET Frameworkを含めるには? - 困ったー
  3. Visual Source Codeとは?Visual Studio 2019との違いは? - 困ったー

このブログは、ネットや書籍上の情報、個人の体験や感想を中心にまとめたものです。 正確性を期していはいますが、間違い・誤訳等あるかもしれません。 当サイトの情報によって生じたいかなる損失について一切の責任を負わないものとします. あらかじめご了承ください。

利用規約・プライバシーポリシー |〇問い合わせ