C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: String.Formatの書式について


(過去ログ 62 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■35692 / inTopicNo.1)  String.Formatの書式について
  
□投稿者/ たに (9回)-(2009/05/12(Tue) 15:59:27)

分類:[C#] 

お世話になります。

文字列型の数値に対して0埋めをしたいのですが、
0埋めする長さが固定ではありません。
下記の様なコードを書いてみたのですがうまくいきません。
String.Format()メソッドの書式には変数を使っての
指定ができないのでしょうか?

lengthには数値の8が、TextBoxのtxtId.Textには"123"が
入っているものとします。
-------------------------------------------
StringBuilder format = new StringBuilder();
format.Append("{0:D");
format.Append(length.ToString() + "}"); // ここで"{0:D8}"が作られる。

// 指定された桁数で0埋めを行う。
string zeroPadding = String.Format(format.ToString(),
                                   txtId.Text);

// 期待値としてzeroPaddingに"00000123"ですが、
// "123"のまま。
-------------------------------------------

環境はXP(SP3)/VS2005/C#/.net2.0です。
宜しくお願いします。

引用返信 編集キー/
■35693 / inTopicNo.2)  Re[1]: String.Formatの書式について
□投稿者/ ぱぱいやん (20回)-(2009/05/12(Tue) 16:06:19)
ぱぱいやん さんの Web サイト
No35692 (たに さん) に返信
> お世話になります。
>
> 文字列型の数値に対して0埋めをしたいのですが、
> 0埋めする長さが固定ではありません。
> 下記の様なコードを書いてみたのですがうまくいきません。
> String.Format()メソッドの書式には変数を使っての
> 指定ができないのでしょうか?
>
> lengthには数値の8が、TextBoxのtxtId.Textには"123"が
> 入っているものとします。
> -------------------------------------------
> StringBuilder format = new StringBuilder();
> format.Append("{0:D");
> format.Append(length.ToString() + "}"); // ここで"{0:D8}"が作られる。
>
> // 指定された桁数で0埋めを行う。
> string zeroPadding = String.Format(format.ToString(),
> txtId.Text);
>
> // 期待値としてzeroPaddingに"00000123"ですが、
> // "123"のまま。
> -------------------------------------------
>
> 環境はXP(SP3)/VS2005/C#/.net2.0です。
> 宜しくお願いします。
>

試してませんが・・・

Console.WriteLine(String.Format("{0:D" + length.ToString() + "}", int.Parse(txtId.Text));

でどうでしょう?

引用返信 編集キー/
■35694 / inTopicNo.3)  Re[2]: String.Formatの書式について
□投稿者/ ぱぱいやん (21回)-(2009/05/12(Tue) 16:10:51)
ぱぱいやん さんの Web サイト
あ、閉じ括弧ひとつ足りない・・・orz
引用返信 編集キー/
■35697 / inTopicNo.4)  Re[3]: String.Formatの書式について
□投稿者/ カドルドエグ (80回)-(2009/05/12(Tue) 16:39:33)
質問者さんが扱っているモノの仕様によりますが、
実際には単に「Parse」より「TryParse」で確認してから
の方が安全ですね。


引用返信 編集キー/
■35698 / inTopicNo.5)  Re[3]: String.Formatの書式について
□投稿者/ みきぬ (423回)-(2009/05/12(Tue) 16:40:12)
大して違いはないけど、括弧をエスケープした例。

string format = String.Format("{{0:D{0}}}", length);
Console.WriteLine(String.Format(format, int.Parse(txtId.Text)));

# "{{" はエスケープされて "{" に、"}}" はエスケープされて "}" になる
引用返信 編集キー/
■35699 / inTopicNo.6)  Re[3]: String.Formatの書式について
□投稿者/ たに (10回)-(2009/05/12(Tue) 16:41:49)
No35694 (ぱぱいやん さん) に返信
> String.Format("{0:D" + length.ToString() + "}", int.Parse(txtId.Text));

ぱぱいやんさん返信ありがとうございます。
引数をParseで数値にしてやると上手くいきました。
ただ、これがうまくいくのは、txtIdが数値に変換が可能な場合に
限るようですね。"A123"と言った場合には当然Parseが無理ですし。

書式文字列を、メソッド内部で直接作ってしまうことも
可能なのですね・・・勉強になります。
って、MSDNよくよく見たら・・・「D」って「数値書式指定文字列」と
書いてありました。あくまでもFormatする対象は「数値」なんですね・・・

Idに文字が混じる場合があるので以下の方法をとりました。
-----------------
int idLength = txtId.Text.Length;
StringBuilder zeroPadding = new StringBuilder();

for (int i = idLength; i < length; i++)
{
    padString.Append("0");
}

// 書き直す
this.txtId.Text = padString.ToString() + this.txtId.Text;
-----------------

これぐらいしか方法が浮かばないのと、期待の動作もするので、
これでいきたいと思います。ありがとうございましたm(__)m

解決済み
引用返信 編集キー/
■35700 / inTopicNo.7)  Re[4]: String.Formatの書式について
□投稿者/ たに (11回)-(2009/05/12(Tue) 16:44:02)
書き込みしてる間に追記されてましたね。

カドルドエグさん、みきぬさんのお二方も
参考レスありがとうございました。
是非活用させて頂きます。

引用返信 編集キー/
■35703 / inTopicNo.8)  Re[5]: String.Formatの書式について
□投稿者/ Hongliang (382回)-(2009/05/12(Tue) 17:19:27)
String に PadLeft メソッドがあります。
引用返信 編集キー/
■35707 / inTopicNo.9)  Re[6]: String.Formatの書式について
□投稿者/ .SHO (820回)-(2009/05/12(Tue) 18:28:37)
Hongliang さんが書かれてますが

txtId.Text.PadLeft( length, '0' )

で一発ですね。
引用返信 編集キー/
■35776 / inTopicNo.10)  Re[7]: String.Formatの書式について
□投稿者/ たに (12回)-(2009/05/13(Wed) 16:57:46)
No35707 (.SHO さん) に返信
> Hongliang さんが書かれてますが
>
> txtId.Text.PadLeft( length, '0' )
>
> で一発ですね。

おぉぉぉぉ。そんなメソッドがあるとは・・・

レスありがとうございます。
なんとなく気になってスレを見返してて良かったです。
感謝です。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -