0

vb.net 文字列にいくつかの問題があり、2 つの文字列を結合して txt ドキュメントに出力します。テキスト ドキュメントで、結合する 2 つの文字列の間に余分なスペースができます。これは起こらないはずです。

           If System.IO.File.Exists(path) = True Then
        ' Create a file to write to. 
        Dim sw As StreamWriter = System.IO.File.CreateText(path)
        sw.WriteLine("Attribute VB_Name = " & Chr(34) & "KbTest" & Chr(34))
        sw.WriteLine("")
        sw.WriteLine("Public Sub DoKbTest()")
        sw.WriteLine("'code here")
        sw.WriteLine("Dim catia")
        sw.WriteLine("set catia = GetObject(, " & Chr(34) & "CATIA.Application" & Chr(34) & ")")
        sw.WriteLine("Dim partDocument1")
        sw.WriteLine("Set partDocument1 = catia.ActiveDocument")
        sw.WriteLine("Dim part1")
        sw.WriteLine("Set part1 = partDocument1.Part")
        sw.WriteLine("Dim hybridShapeFactory1")
        sw.WriteLine("Set hybridShapeFactory1 = part1.HybridShapeFactory")
        sw.WriteLine("Dim hybridShapeDirection1")
        sw.WriteLine("Set hybridShapeDirection1 = hybridShapeFactory1.AddNewDirectionByCoord(1#, 2#, 3#)")
        sw.WriteLine("Dim hybridBodies1")
        sw.WriteLine("Set hybridBodies1 = part1.HybridBodies")
        sw.WriteLine("Dim hybridBody1")
        sw.WriteLine("Set hybridBody1 = hybridBodies1.Item(" & Chr(34) & "PointSetx" & Chr(34) & ")")
        sw.WriteLine("dim skteches1")
        sw.WriteLine("Set sketches1 = hybridBody1.HybridSketches")
        sw.WriteLine("Dim sketch1")
        sw.WriteLine("Set sketch1 = sketches1.Item(" & Chr(34) & "Sketch.1" & Chr(34) & ")")
        sw.WriteLine("Dim reference1")
        sw.WriteLine("Set reference1 = part1.CreateReferenceFromObject(sketch1)")
        sw.WriteLine("Dim hybridShapeExtremum1")
        sw.WriteLine("Set hybridShapeExtremum1 = hybridShapeFactory1.AddNewExtremum(reference1, hybridShapeDirection1, 1)")
        sw.WriteLine("hybridBody1.AppendHybridShape hybridShapeExtremum1")
        sw.WriteLine("Dim reference2")

        Dim lessOneCount As String
        Dim spacing As Double = 0
        Dim count As String
        Dim setString As String
        'loop

これは余分なスペースを追加しているコードの一部です

For i = 1 To numbOfPoints Step 1

            count = Str(i)
            count.Replace(" ", "")
            MsgBox(count)
            If i < 2 Then
                lessOneCount = "hybridShapeExtremum1"
            Else
                lessOneCount = "HybridShapePointOnCurve" + Str(i - 1)
            End If

            sw.WriteLine("reference2 = part1.CreateReferenceFromObject(" + lessOneCount + ")")

            setString = "Dim hybridShapePointOnCurve" + count
            sw.WriteLine(setString)
            setString = "hybridShapePointOnCurve" + count + " = hybridShapeFactory1.AddNewPointOnCurveWithReferenceFromDistance(reference1, reference2, spacing, False)"
            sw.WriteLine(setString)
            setString = "hybridShapePointOnCurve" + count + ".DistanceType = 1"
            sw.WriteLine(setString)
            setString = "hybridBody1.AppendHybridShape(hybridShapePointOnCurve" + count + ")"
            sw.WriteLine(setString)


        Next

        sw.WriteLine("End Sub")


        sw.Flush()
        sw.Close()
    End If

出力例: Dim HybridShapePointOnCurve 2

であるべきです: Dim HybridShapePointOnCurve2

文字列を結合する方法にどのような変更を加える必要がありますか?

ありがとう!

4

2 に答える 2

0

私のコメントがあなたの質問に完全に答えていないことに気付いたので、いくつかのことを:

  1. このString.Replace方法は、あなたが思うようには機能しません。と言っcount.Replace(" ", "")て実際に変数を変更するわけではありませんcount。関数は実際に新しい文字列を返します。必要に応じて動作させるには、 を実行する必要がありますcount = count.Replace(" ", "")

  2. StringBuilder一連の文字列を連結する代わりに、a を使用することを検討してください。パフォーマンスが大幅に向上します。クラスを使用する場合、単に呼び出すだけで、最後までStringBuilder書き込む必要もありません。StreamWritersw.Write(stringBuilderObject.ToString())

  3. 私はしばらく VB.NET を使用していませんが、何Str(i)が返されるかを確認します。VB 関数を使用する代わりに、.NET 関数を使用することを検討してくださいcount = i.ToString()。Sky によると、Str 関数は実際にスペースを返します。これは、負の符号のために予約されているためです。これに基づいて、.ToString()代わりにメソッドを使用します。

于 2014-07-10T02:42:39.627 に答える
0

コメントですぐに話しましたが、Str関数は符号の余地を予約しています。正の数であるため符号はありません。負の場合はマイナス符号があります。Trim(Str(i))代わりに試す

上記のリンクから(強調鉱山):

この例では、Str 関数を使用して、数値の文字列表現を返します。正の数値が文字列に変換される場合、先頭のスペースは常にその符号用に予約されています

于 2014-07-10T03:03:22.053 に答える