none
VB2008 文字列をくっつけたい RRS feed

  • 質問

  • こんばんは、

    以下のようにして作った文字列 c1とc2 をひとつの文字列にしたいのですがどうすればよいのでしょうか。

     

    シリアルポートからbyteたちを読み込み それを 文字列としました。

    次にまたシリアルポートからbyteたちを読み込み 文字列としました。

    それらをひとつの文字列にするのにどうすればよいのでしょうか

     

    Dim d1() as Byte = { 65,66,67}

    Dim d2() as Byte = {68,69,70}

    Dim c1() As Char = System.Text.Encoding.ASCII.GetChars(d1)

    Dim c2() As Char = System.Text.Encoding.ASCII.GetChars(d2)

     

     

    また Char型の文字列をStringに変換できないのでしょうか。

     

    以上 お願いします。

    2008年7月9日 10:02

回答

  • strcat さん、こんにちは。(strcat 関数を思い出しますね)

     

     strcat さんからの引用

    それらをひとつの文字列にするのにどうすればよいのでしょうか

     

    再度 2 つの Char サイズ分の Char の配列を作成してコピーするだけで良いでしょう。
    Byte 型からであれば、今まさに使用している GetChars のオーバーロードの 1 つが使えるハズです。


    VB.NET
    Dim c As Char() = New Char(d1.length + d2.length - 1) {}
    System.Text.Encoding.ASCII.GetChars(d1, 0, d1.Length, c, 0)
    System.Text.Encoding.ASCII.GetChars(d2, 0, d2.Length, c, d1.Length)

     

    たぶん、こんな感じじゃないでしょうか。

     

    また Char型の文字列をStringに変換できないのでしょうか。

     

    特に何もしなくても String 型に格納できます。

     

    VB.NET
    Dim st As String = c

     

    こういう感じです。

    2008年7月9日 10:18
  • ありがとうございます。

    申し訳ないのですがもっと簡単な記載に分解していただけませんか

     

    {} はどう有意味ですか ?

     

    C 言語でいう strcat見たいな ものは何のでしょうか?

     

    d1とd2は時間的に同時に存在せずに

    d1にd2を付け加えまたさらに次の時間に d1に次のd2を付け加える感じです。

     

     

     

    ご回答)

    Dim c As Char() = New Char(d1.length + d2.length - 1) {}
    System.Text.Encoding.ASCII.GetChars(d1, 0, d1.Length, c, 0)
    System.Text.Encoding.ASCII.GetChars(d2, 0, d2.Length, c, d1.Length)

     

    2008年7月9日 12:41
  •  strcat さんからの引用

    {} はどう有意味ですか ?

    C言語でもありませんでいしたか?

    int a[] = {1, 2, 3};のようなものが。

     

    {  }の内にある要素を持つ配列を作るための構文です。

     

     strcat さんからの引用

    C 言語でいう strcat見たいな ものは何のでしょうか?

    単純に + 演算子でString型同士を繋げれば良いです。

     

    Code Snippet
    Dim a As String = "aaaa"
    Dim b As String = "bbbb"
    Dim c As String = a + b

     

     

    cにはaとbの中身を繋げた"aaaabbbb"が入ります。

     

     strcat さんからの引用

    d1とd2は時間的に同時に存在せずに

    d1にd2を付け加えまたさらに次の時間に d1に次のd2を付け加える感じです。

    String型の変数を新たに作ってそれに繋げれば良いかと。

     

     

    追伸。

    質問の度に名前を変える必要はないと思いますよ。

    #名前を変えても、個人プロファイルの「検索」で分かったりします。

    2008年7月9日 14:24
    モデレータ
  •  strcat さんからの引用

    申し訳ないのですがもっと簡単な記載に分解していただけませんか


    サンプルなので最も単純なもので記載したつもりです。
    あなたが要求しているのは 「簡単な記載に分解せよ」 ではなく、「自分の状況で動くものを作れ」 ではないでしょうか。
    私はあなたが要求している前提を知らないので Sample しか書くことができません。

    {} はどう有意味ですか ?

     

    (言語仕様レベルのことは調べた方が早いです)
    {} は配列の要素への初期化子です。 今回は特に初期化はしておりませんがこれを省略することはできません。
    VB は配列の要素数の宣言にも () を使いますし、引数コンストラクタへの引数リストでも () を使います。

    これらを区別するために特に初期化を指定する必要がなくても {} をつける必要があります。

     

    C 言語でいう strcat見たいな ものは何のでしょうか?


    strcat と同等なものを自作したことはないのでしょうか。
    (組込分野だと案件によっては strcat などの関数が使えない場面に出くわすことがあったりするのですが)
    本当に同等にしたければ、2 つの引数の配列の要素数を考慮して新しい領域を確保して For ステートメントでコピーしていくだけです。


    d1とd2は時間的に同時に存在せずに

    d1にd2を付け加えまたさらに次の時間に d1に次のd2を付け加える感じです。


    再度 2 つの Char サイズ分の Char の配列を作成してコピーするだけで良いでしょう。

    とすでに書いてあるとおりで、時系列はほとんど関係ないでしょう。

    それとすでにフォローが入っていますが、こういった場合 (特に初心者の方は) Char のまま扱うよりは String で扱うようにした方が良いです。 最終的に Char の配列で扱いたい場合は、ToCharArray メソッドが使えます。

     

    # 何だか技術どうこうというより会話が微妙に成立していないだけのような気もするのですが、文章から察するに母国語が日本語ではない方でしょうか?

    2008年7月10日 1:44

すべての返信

  • strcat さん、こんにちは。(strcat 関数を思い出しますね)

     

     strcat さんからの引用

    それらをひとつの文字列にするのにどうすればよいのでしょうか

     

    再度 2 つの Char サイズ分の Char の配列を作成してコピーするだけで良いでしょう。
    Byte 型からであれば、今まさに使用している GetChars のオーバーロードの 1 つが使えるハズです。


    VB.NET
    Dim c As Char() = New Char(d1.length + d2.length - 1) {}
    System.Text.Encoding.ASCII.GetChars(d1, 0, d1.Length, c, 0)
    System.Text.Encoding.ASCII.GetChars(d2, 0, d2.Length, c, d1.Length)

     

    たぶん、こんな感じじゃないでしょうか。

     

    また Char型の文字列をStringに変換できないのでしょうか。

     

    特に何もしなくても String 型に格納できます。

     

    VB.NET
    Dim st As String = c

     

    こういう感じです。

    2008年7月9日 10:18
  • ありがとうございます。

    申し訳ないのですがもっと簡単な記載に分解していただけませんか

     

    {} はどう有意味ですか ?

     

    C 言語でいう strcat見たいな ものは何のでしょうか?

     

    d1とd2は時間的に同時に存在せずに

    d1にd2を付け加えまたさらに次の時間に d1に次のd2を付け加える感じです。

     

     

     

    ご回答)

    Dim c As Char() = New Char(d1.length + d2.length - 1) {}
    System.Text.Encoding.ASCII.GetChars(d1, 0, d1.Length, c, 0)
    System.Text.Encoding.ASCII.GetChars(d2, 0, d2.Length, c, d1.Length)

     

    2008年7月9日 12:41
  •  strcat さんからの引用

    {} はどう有意味ですか ?

    C言語でもありませんでいしたか?

    int a[] = {1, 2, 3};のようなものが。

     

    {  }の内にある要素を持つ配列を作るための構文です。

     

     strcat さんからの引用

    C 言語でいう strcat見たいな ものは何のでしょうか?

    単純に + 演算子でString型同士を繋げれば良いです。

     

    Code Snippet
    Dim a As String = "aaaa"
    Dim b As String = "bbbb"
    Dim c As String = a + b

     

     

    cにはaとbの中身を繋げた"aaaabbbb"が入ります。

     

     strcat さんからの引用

    d1とd2は時間的に同時に存在せずに

    d1にd2を付け加えまたさらに次の時間に d1に次のd2を付け加える感じです。

    String型の変数を新たに作ってそれに繋げれば良いかと。

     

     

    追伸。

    質問の度に名前を変える必要はないと思いますよ。

    #名前を変えても、個人プロファイルの「検索」で分かったりします。

    2008年7月9日 14:24
    モデレータ
  •  strcat さんからの引用

    申し訳ないのですがもっと簡単な記載に分解していただけませんか


    サンプルなので最も単純なもので記載したつもりです。
    あなたが要求しているのは 「簡単な記載に分解せよ」 ではなく、「自分の状況で動くものを作れ」 ではないでしょうか。
    私はあなたが要求している前提を知らないので Sample しか書くことができません。

    {} はどう有意味ですか ?

     

    (言語仕様レベルのことは調べた方が早いです)
    {} は配列の要素への初期化子です。 今回は特に初期化はしておりませんがこれを省略することはできません。
    VB は配列の要素数の宣言にも () を使いますし、引数コンストラクタへの引数リストでも () を使います。

    これらを区別するために特に初期化を指定する必要がなくても {} をつける必要があります。

     

    C 言語でいう strcat見たいな ものは何のでしょうか?


    strcat と同等なものを自作したことはないのでしょうか。
    (組込分野だと案件によっては strcat などの関数が使えない場面に出くわすことがあったりするのですが)
    本当に同等にしたければ、2 つの引数の配列の要素数を考慮して新しい領域を確保して For ステートメントでコピーしていくだけです。


    d1とd2は時間的に同時に存在せずに

    d1にd2を付け加えまたさらに次の時間に d1に次のd2を付け加える感じです。


    再度 2 つの Char サイズ分の Char の配列を作成してコピーするだけで良いでしょう。

    とすでに書いてあるとおりで、時系列はほとんど関係ないでしょう。

    それとすでにフォローが入っていますが、こういった場合 (特に初心者の方は) Char のまま扱うよりは String で扱うようにした方が良いです。 最終的に Char の配列で扱いたい場合は、ToCharArray メソッドが使えます。

     

    # 何だか技術どうこうというより会話が微妙に成立していないだけのような気もするのですが、文章から察するに母国語が日本語ではない方でしょうか?

    2008年7月10日 1:44