Hej. Kan du inte formatera 890000 till 89.00.00 i din string-array? Så att det redan är rätt formaterat när du skapar din formaterade sträng. Hej Johan. Jo, jag förstod att du datat kom från något annat ställe. Tänkte mer att du skulle göra något sånt här, men det kanske inte är möjligt? Mm.. förstår vad du menar. Andra parametern in till string.Format är object[]. Kan du inte helt enkelt bara göra om din array till lite mindre typad...typ: Hej Chris.String.Format nummerformat
Har ett litet delikat problem som jag inte lyckas lösa så snyggt.
Jag plockar ut data ur en databas och vill formattera utsträngen på ett
specifikt sätt. Se kod;
string[] aryStrings = new string[3];
aryStrings[0] = "S98";
aryStrings[1] = "KONTROLL";
aryStrings[2] = "890000";
// format på utdata: "S98 -KONTROLL :: 89.00,00"
string stringformat = "{0} -{1} :: {2}";
string output = String.Format(stringformat, aryStrings);
Problemet är att jag inte lyckas med att formattera {2} till numeriskt
eftersom jag använder en string array. Hade jag använt en int array t.ex.
så hade jag kunnat använda {2:##.##,##}.
Har nån något bra förslag på formatteringen eller om jag kanske ska
använda nåt annat sätta att lagra data istället för string array.
Tackar på förhand!
// Peter Carlsson
Sv: String.Format nummerformat
/JohanSv:String.Format nummerformat
Detta är knepigt att förklara :)
Problemet är att jag inte vet hur datat ser ut.
Jag ger ett bättre "live" exempel istället.
Dokumentationen ser ut så här på för en sk. "event";
Event: 6
Dataformat: "SSTTMMZZZZZZZZZZ"
Show as: "SS TTMM KONTROLL Z.ZZZ.ZZZ,ZZ -----------"
Exempeldata på en event: "321631 11410000"
Detta ska då ge en sträng som ser ut så här: "32 1631 KONTROLL 114.100,00 -----------"
Det finns över 2400 eventnummer så jag måste skapa en databas med någon slags mall på hur strängen ska visas i programmet. Så vad jag har gjort är att skapat en "mall" som ser ut så här;
event mask stringformat
6 0011112222222222 {0} {1} KONTROLL {2} -----------
Här är min kod som jag använder nu;
textBox1.Text = "321631 11410000@";
textBox2.Text = "0011112222222222";
textBox3.Text = "{0} {1} KONTROLL {2} -----------";
string data = textBox1.Text;
string parameters = textBox2.Text;
string textformat = textBox3.Text;
int lastindex = Convert.ToInt32(parameters.Substring(parameters.Length - 1, 1));
string[] aryData = new string[lastindex + 1];
for (int i = 0; i <= lastindex; i++)
{
int iTempStart = parameters.IndexOf(i.ToString());
int iTempStop = parameters.LastIndexOf(i.ToString());
int iTempLen = (iTempStop + 1) - iTempStart;
aryData[i] = data.Substring(iTempStart, iTempLen).Trim();
}
textBox4.Text = String.Format(textformat, aryData);
Det kanske finns nåt ännu bättre sätt att formatera strängarna så jag är öppen för förslag. :)
Hoppas detta beskriver mitt problem lite bättre.
// Peter
Sv: String.Format nummerformat
aryStrings[2] = Convert.ToInt32(aryStrings[2]).ToString("##.##,##");
Eller hur nu syntaxen kan vara, tanken var iaf att formatera talen innan resten av strängen.
/JohanSv:String.Format nummerformat
Jag tror jag får formatera det så här "{0} {1} KONTROLL {2}.{3}.{4},{5} -----------"
och sen inte bry mig om att t.ex. {2} är "". Inte så snyggt men det funkar.
Jag kanske kan specificera i databasen vilket fält som är numeriskt och trixa till det på nåt sätt.
Men det hade varit så optimalt att säga t.ex. {2:#.###.###,00} fastän det är en sträng.
// PeterSv: String.Format nummerformat
<code>
object[] aryObjects = new object[3];
aryObjects [0] = "S98";
aryObjects [1] = "KONTROLL";
aryObjects [2] = 890000;
</code>
och sedan:
<code>
string stringformat = "{0} -{1} :: {2:###.###.###,00}";
string output = String.Format(stringformat, aryObjects );
</code>
Om det nu var formatet du ville ha... Funkar bara på svenskt OS dock... Formatsträngen alltså...Sv:String.Format nummerformat
Du löste det!
Jag har kämpat med en annan lösning lite eftersom detta inte höll på andra sätt. :(
Däremot så får jag användning av det i mitt nästa projekt! :)
Tack så mycket!
// Peter