2011-06-23 4 views
0

Je dois créer une chaîne longue, d'environ 360 caractères, avec différentes valeurs que j'envoie à un service. Je connais les positions pour chaque section et je dois être en mesure d'insérer des valeurs et des espaces vides jusqu'à ce que j'arrive au poste suivant. Ce qui suit est juste un exemple que j'ai commencé; par exemple, je dois commencer en position 0 et la prochaine valeur doit aller en position 5 (abc). Jusqu'à présent, j'ai été en mesure de concaténer comme ceci: "1234abc", mais ce dont j'ai besoin est "1234 [espace] abc [espace] [espace]" Merci pour votre aide.Créer une chaîne avec des espaces avec Générateur de chaînes ou Classe de chaînes

//sbTrialSpaces 
    private void TrialSpaces() 
    { 

     string str1 = "1234"; 
     string str2 = "abc"; 
     string finalStr;//Has to be 10 positions 
     //like this "1234 abc " 

    } 

Répondre

6
string.Format("{0,-5}{1,-5}{2,-5}", val1, val2, val3); 

Cela fera cinq espaces pour chacune des valeurs, même si elles sont moins de cinq caractères large. Le "-" signifie que les valeurs seront justifiées à gauche.

+0

Merci à TOUS pour vos excellentes réponses RAPIDES. J'ai juste essayé cette suggestion et suffire à mes besoins. Je vais certainement essayer les autres réponses quand j'ai une chance, mais pour l'instant je peux passer à autre chose. Vous avez tous une bonne journée! – Tony

0
var finalStr = ("1234" + " " + "abc").PadRight(10, ' '); 
1

Il suffit d'utiliser StringBuilder comme vous le suggérez.

StringBuilder sb = new StringBuilder(); 
sb.Append(str1); 
sb.Append(" "); 
sb.Append(str2); 
sb.Append(" "); 
string finalString = sb.ToString(); 
0

Vous pouvez utiliser String.Join

String.Join(" ", myStrings); 

est une myStrings En supposant IEnumerable de cordes

0
while (finalStr.Length < 10) 
    finalStr += " "; 
0

Je recommande le format Fixed Length que FileHelpers supports.

[FixedLengthRecord()] 
public class Order 
{ 
    [FieldFixedLength(5)] 
    public int OrderId; 

    [FieldFixedLength(30)] 
    [FieldTrim(TrimMode.Right)] 
    public string CustomerName; 

    [FieldFixedLength(10)] 
    public string SKU; 

    [FieldFixedLength(8)] 
    [FieldConverter(typeof(TwoDecimalConverter))] 
    public decimal Price; 

    [FieldFixedLength(8)] 
    [FieldConverter(ConverterKind.Date, "ddMMyyyy")] 
    public DateTime AddedDate; 
} 
0
string finalStr = str1.PadRight(4,' ') + str2.PadRight(6,' '); 

Il n'y a pas besoin d'un stringbuilder parce que vous ajoutez tout à la fois.

Questions connexes