mikrocontroller.net

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


Autor: Karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
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

Autor: Dirac Impuls (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn einem nichts besseres einfällt:
string blanks = "";
for(int i=0;i< 3 - id.ToString().Length; i++)
{
  blanks += " ";
}
xml.WriteLine("/*" + blanks + id + "*/ " + signallist[var] + ";");

Autor: Karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
id.ToString().PadLeft(5) ?

Autor: mars (Gast)
Datum:

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

Autor: Dennis Heynlein (c-logic)
Datum:

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

Autor: Karsten (Gast)
Datum:

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

sauberst, genau sowas wollte ich haben

Autor: Pit (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dennis Heynlein (c-logic)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.