Forum: PC-Programmierung c# bestimmte anzahl an stellen in ausgabe frei halten


von Karsten (Gast)


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

von Dirac Impuls (Gast)


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] + ";");

von Karsten (Gast)


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.

von Tom (Gast)


Lesenswert?

id.ToString().PadLeft(5) ?

von mars (Gast)


Lesenswert?

String.Format("/* {0,3} */ {1};", id, signallist[var]);

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

oder xml.WriteLine("/* {0,3} */ {1};", id, signallist[var]);

von Karsten (Gast)


Lesenswert?

Dennis H. schrieb:
> oder xml.WriteLine("/* {0,3} */ {1};", id, signallist[var]);

sauberst, genau sowas wollte ich haben

von Pit (Gast)


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

von Dennis H. (c-logic) Benutzerseite


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.