2014-07-10 2 views
0

Problèmes avec la chaîne vb.net pour joindre deux chaînes ensemble pour la sortie vers un document txt. Mon document texte obtient un espace supplémentaire entre les deux chaînes que je rejoins. Cela ne devrait pas arriver.VB.net string join, ajoute un espace non nécessaire

  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 

CECI EST LE PARTIE DU CODE QUI AJOUT ESPACES EXTRA

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 

Exemple de sortie: Dim hybridShapePointOnCurve 2

DEVRAIT être: Dim hybridShapePointOnCurve2

Quelles modifications devraient Je fais à la façon dont je joins des cordes?

Merci!

+1

'count.Replace (" "," ")' ne fonctionne pas comme vous le pensez. La fonction renvoie une chaîne - donc vous devrez faire 'count = count.Replace (" "," ")' pour qu'il fonctionne correctement. – entropic

+0

Juste échangé cela, ne fonctionne toujours pas. J'ai seulement ajouté cela en dernier recours de toute façon. str (i) ne devrait pas donner d'espaces pour commencer. –

+0

Vous pouvez utiliser la méthode 'trim()' pour couper des espaces vides à la place. Donc, au lieu de 'count.Replace (" "," ")' vous pouvez faire 'count = trim (count)'.Idem pour votre 'lessOneCount =" HybridShapePointOnCurve "+ Str (i - 1)' utiliser 'lessOneCount =" HybridShapePointOnCurve "+ trim (Str (i - 1))' – Sky

Répondre

0

mon commentaire ne Réalisés pas répondre à votre question complètement, donc quelques choses:

  1. La méthode String.Replace ne fonctionne pas comme vous le pensez. Dire count.Replace(" ", "") ne change pas réellement la variable count; la fonction renvoie réellement une nouvelle chaîne. Pour que cela fonctionne comme vous le souhaitez, vous devez faire count = count.Replace(" ", ""). Envisagez d'utiliser un StringBuilder au lieu de concaténer un groupe de chaînes ensemble. Cela améliorera grandement les performances. Lorsque vous utilisez la classe StringBuilder, vous aussi auriez pas besoin d'écrire sur le StreamWriter jusqu'à la fin, tout simplement en appelant sw.Write(stringBuilderObject.ToString())

  2. Je ne l'ai pas utilisé VB.NET dans un certain temps, mais je voudrais vérifier ce que Str(i) retours . Au lieu d'utiliser les fonctions VB, pensez à utiliser les fonctions .NET en disant count = i.ToString(). Selon Sky, la fonction Str retourne en effet un espace car elle le réserve pour le signe négatif. Sur cette base, j'utiliserais plutôt la méthode .ToString().

+0

Le problème avec ops est en fait Str (i), il retournera" 1 "," 2 " et donc. Il y a un espace car il est réservé pour un signe négatif. C'est ce que la méthode retourne. Il pourrait juste couper les espaces ou utiliser la méthode ToString comme vous l'avez suggéré – Sky

+0

Si c'est le cas, alors il devrait certainement utiliser 'i.ToString()' et '(i - 1) .ToString()' – entropic

+0

Oui, s'il veut juste pour utiliser la fonction 'Str', il devra alors couper les espaces vides dans ce cas. – Sky

0

j'ai parlé rapidement dans mon commentaire, la salle des réserves de fonction Str pour le signe, car il est un nombre positif, il n'y a aucun signe, si elle était négative il y aurait un signe moins là. Essayez Trim(Str(i)) à la place

De lien ci-dessus (de Souligné par):

Cet exemple utilise la fonction Str pour retourner une représentation de chaîne d'un nombre. Lorsqu'un nombre positif est converti en chaîne, un espace d'interlignage est toujours réservé à son signe.