指定した文字列を指定した数だけ並べた文字列を取得するには?

解決


唯香  2010-06-30 02:32:30  No: 146953

いつも参考にさせていただいております。

タイトルのとおりですが
具体的にはvbcrlfを指定した個数分並べた文字列が欲しいです。

以下のように試してみたところラインフィードが無視され
キャリッジリターンが指定数並んだものがとれているようです。

Dim strA As String = StrDup(x, vbCrLf)
Dim strB As String = New String(vbCrLf, x)

現在はFor文でグリグリまわして使っているため支障はないのですが
かっこ悪いのでスマートな方法を教えてください。


魔界の仮面弁士  2010-06-30 05:29:43  No: 146954

> 具体的にはvbcrlfを指定した個数分並べた文字列が欲しいです。
Perl や PowerShell だと、「strC = vbCrLf * 10」のような構文が
用意されていますが、VB ではそうもいきませんしね。

> 以下のように試してみたところラインフィードが無視され
String ではなく Char が対象なので、先頭 1 文字しか使われません。
(Option Strict On だと、strB 構文はエラーになるはず)

> 現在はFor文でグリグリまわして使っているため支障はないのですが
強いて For を使わずに 1 行で書くとなると、思いつく範囲ではこの程度…。

'VB2008, VB2010
strC = Join(Enumerable.Repeat(vbCrLf, x).ToArray(), "")

'VB.NET2002, VB.NET2003, VB2005, VB2008, VB2010
strD = Space(x * 2).Replace("  ", vbCrLf)

'VB6, VB.NET2002, VB.NET2003, VB2005, VB2008, VB2010
strE = Replace(Space(2 * x), "  ", vbCrLf)


唯香  2010-06-30 20:38:18  No: 146955

魔界の仮面弁士様お返事いただきありがとうございます。

> > 以下のように試してみたところラインフィードが無視され
> String ではなく Char が対象なので、先頭 1 文字しか使われません。
> (Option Strict On だと、strB 構文はエラーになるはず)

なるほどΣ(・∀・)
というか無視された時点で気づくべきでしたね。

> 強いて For を使わずに 1 行で書くとなると、思いつく範囲ではこの程度…。

あぁ‥。
環境を申し上げるのを忘れておりました。
すべての環境で書いていただき大変お手数おかけしました。
他の皆さんにもお役に立つことを願います。

> 'VB2008, VB2010
> strC = Join(Enumerable.Repeat(vbCrLf, x).ToArray(), "")

Enumerable(・∀・)知らなかったです。
新しいことをまた教えていただきました。
詳細を調べて自分のモノにしたいと思います。

> 'VB.NET2002, VB.NET2003, VB2005, VB2008, VB2010
> strD = Space(x * 2).Replace("  ", vbCrLf)

> 'VB6, VB.NET2002, VB.NET2003, VB2005, VB2008, VB2010
> strE = Replace(Space(2 * x), "  ", vbCrLf)

やはり魔界の仮面弁士様は違いますね。
この2つなら唯香の少ない知識だけでできますね。

魔界の仮面弁士様いつも気にかけてくださりありがとうございます。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加