2016-08-29 3 views
1

私はコードは次のようである最初の連結記号

一部の行の最初の名前をキャッチするために、テーブルのデータベースをループするよ取り除く方法:

Try 
While (readerFirstName.Read()) 
    SearchedName = readerFirstName("parteA") 
    CombinatedNames = CombinatedNames & " & " & SearchedName 
End While 

Catch ex As Exception 
    MsgBox(ex.ToString()) 
End Try 

および所望の結果のSIのようなものを

マイク&エリック&トム

が、私は

を取得

&マイク&エリック&トム

私はString.TrimStart

を使用して、私は、文字列を形成した後、最初の「&」を取り除くことができると思いますが、最初の「&」を削減する良い方法はありますか?

答えて

5

はあなたのループを交換してみてください:

このいずれかで
While (readerFirstName.Read()) 
    SearchedName = readerFirstName("parteA") 
    CombinatedNames = CombinatedNames & " & " & SearchedName 
End While 

Dim names As New List(Of String)() 
While (readerFirstName.Read()) 
    names.Add(readerFirstName("parteA")) 
End While 
CombinatedNames = String.Join(" & ", names) 

ここでの主なアイデアは、1回の操作で単一の名前を連結するString.Join methodを使用することです。このメソッドはコレクションに作用するので、最初に単一のアイテムをコレクションnamesに読み込む必要があります。

この方法は、決して最初または最後の後にする前に、区切り文字列に" & "間の項目を追加するために世話をしますので、あなたがあなたの空のアイテムを持っていない限り、あなたは、先頭または末尾のセパレータ(で終わるません。リスト)。

P.S:あなたはreaderFirstNamesから読み込まれます、事前にどのように多くの名前を知ってしまった場合、あなたは(capacityパラメータとして)List(Of T)コンストラクタに名前の数を渡すことで、私の提案コードのメモリ使用量を最適化することができます。あなたはに含まれているが、他の回答それに

While (readerFirstName.Read()) 
    SearchedName = readerFirstName("parteA") 
    If Not isNullOrEmpty(CombinatedNames) Then 
     CombinatedNames = CombinatedNames & " & " & SearchedName 
    Else 
     CombinatedNames = SearchedName 
    End If 
End While 
+0

ソリューションは非常によく働いたし!!定義されていない数のアイテムの配列を作成する方法についてはわかりませんでした。私はどのくらいのアイテムが各ループにあるのか分かりませんが、データベースは小さく、おそらく1000個以上のアイテムなので、メモリは問題ではないと思います。 – fedeteka

2

はそれを行うための通常の方法ですが、ここではいくつかのlazierの選択肢です:

これは削除されます最初の3つの文字:

CombinatedNames = Mid(CombinatedNames , 4) 

これは文字列の先頭から&をトリミングします:

CombinatedNames = CombinatedNames.TrimStart(" "c, "&"c) 
+0

@fedeteka:このオプションを使用する場合は、[StringBuilderクラス](https://msdn.microsoft.com/en-us/library/2839d5h5.aspx)を調べることをお勧めします。ループ内で繰り返される文字列の連結は、このクラスの典型的な使用例です。それはメモリ効率的です。 – stakx

+0

@JaydipJあまりにもうまく働いた。ありがとう – fedeteka

+0

@stakxチップをありがとう。 – fedeteka

2

をテキストを追加する前に、文字列を組み合わせて確認することができます

+0

これは、削除する文字を正確に知っているときにうまくいく、すてきで簡単なソリューションです。ちょうど1つの注釈:第2の 'TrimStart'ベースのアプローチは、理論上、スペースまたはアンパサンドで始まる場合、最初のアイテムを切り捨てることができます。 – stakx

+0

CombinatedNames = Mid(CombinatedNames、4)も問題なく動作しましたが、私の場合は3番です – fedeteka

2

またはあなただけの最初のレコードを読み、そして残り連結することができます:

CombinatedNames = If(readerFirstName.Read, readerFirstName!parteA.ToString, "") 
While readerFirstName.Read 
    CombinatedNames &= " & " & readerFirstName!parteA.ToString 
End While 
関連する問題