c# bestimmte anzahl an stellen in ausgabe frei halten

Gast #4681972
Lesenswert?

nabend, ich erstelle eine header file mit c#. Das ganze funktioniert 
auch schon ganz gut, jetzt möchte ich das noch ein bisschen ordentlicher 
machen.
Die Signale stehen in einem num. vor jedem Signal steht als kommentar 
die Nummer. Bisher sieht die AUsgabe wie folgt aus

/*1*/ Signal1;
/*2*/ Siganl2;
...
/*10*/ Signal10;
...
/*100*/ Signal100;
...

Die Signale stehen in einer liste, die ich mit foreach durchlaufe. Dabei 
inkrementiere ich eine Variable 'id' jedes mal, die ich dann im 
Kmomentar rein schreibe.

die Zeile zum schreiben sieht momtan wie folg aus
1
xml.WriteLine("/*" + id + "*/ " + signallist[var] + ";");

wie kann ich es machen, dass zwischen den kommentarzeichen immer gleich 
viele stellen frei sind und die variable dazwischen steht? also, dass 
die ausgabe aussieht:

...
/*   9  */ Signal9;
/*  10  */ Signal10;
...
/* 100  */ Signal 100:
...

also, dass die stellen der zahlen (einer, zehner, hunderter) immer 
untereinander stehen
Karsten
Gast #4681988
Lesenswert?

Wenn einem nichts besseres einfällt:
1
string blanks = "";
2
for(int i=0;i< 3 - id.ToString().Length; i++)
3
{
4
  blanks += " ";
5
}
6
xml.WriteLine("/*" + blanks + id + "*/ " + signallist[var] + ";");
Gast #4681998
Lesenswert?

So etwas wäre eine Notlösung.
Das ganze mache ich für 7 verschiedene sachen (Signale, Aktionen, 
Variablen, Funktionen, Timer...) das würde die ganze sache ganz schön 
aufblähen, da ich das ja jedesmal so machen müsste.
Gast #4689111
Lesenswert?

Karsten schrieb:
> Dennis H. schrieb:
>> oder xml.WriteLine("/* {0,3} */ {1};", id, signallist[var]);
>
> sauberst, genau sowas wollte ich haben

naja prinzipiell funktioniert das ganze mit sprintf().

Du musst nur irgendsowas machen: "%03d".

Das macht aus Deiner Zahl einen Dezimalwert (d) mit drei Stellen (3) und 
die nicht genutzten Stellen werden mit Nullen aufgefüllt (0).

Z. B. sprintf(..., "%03d", 1);

Ausgabe:
001

Jetzt musst Du nur noch die entsprchende Funktion in C# finden und die 
Nullen mit dem Leerzeichen ("% 3d") ersetzen.

Gruß Pit
Persönliche Seite #4689313
Lesenswert?

Pit schrieb:
> Karsten schrieb:
>> Dennis H. schrieb:
>>> oder xml.WriteLine("/* {0,3} */ {1};", id, signallist[var]);
>>
>> sauberst, genau sowas wollte ich haben
>
> naja prinzipiell funktioniert das ganze mit sprintf().
>
> Du musst nur irgendsowas machen: "%03d".
>
> Das macht aus Deiner Zahl einen Dezimalwert (d) mit drei Stellen (3) und
> die nicht genutzten Stellen werden mit Nullen aufgefüllt (0).
>
> Z. B. sprintf(..., "%03d", 1);
>
> Ausgabe:
> 001
>
> Jetzt musst Du nur noch die entsprchende Funktion in C# finden und die
> Nullen mit dem Leerzeichen ("% 3d") ersetzen.
>
> Gruß Pit

In C# gibt es genug Formatierungsfunktionen oder Funktionen die einen 
Formatierungsstring akzeptieren.
String.Format / String.ToString oder .WriteLine(Format,Object,....)

Die Formatbeschreibung ist allerdings nicht kompatibel mit C's *printf

In C funktioniert natürlich für diesen Anwendungsfall
der Formatstring "% 3d" für führende Leerzeichen statt 0'en.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren