Gyakorlat – Sztringek egyesítése karakteres feloldósorozatokkal
Tegyük fel, hogy felkérték egy parancssori eszköz makettjének létrehozására, amely angol és japán nyelven is létrehoz számlákat. A számlák létrehozására használható funkciókat most nem kell létrehoznia. Csak a számlázási részleg belső ügyfeleinek kell megadnia a parancssori felületet a jóváhagyásukhoz. A felettese arra kérte, hogy adjon meg egy formázást, amelyen az eszköz aktuális állapota látható. A felettes azt is kérte, hogy adjon tájékoztatást a japán felhasználók számára arról, hogy hogyan lehet a számlákat japán nyelven létrehozni.
Gyakorlat – Literális sztringek formázása C-ben#
Ebben a gyakorlatban különböző technikákat ismerhet meg a speciális karakterek megjelenítéséhez és különböző formázási módok hozzáadásához a kimenethez.
Karakteres feloldósorozatok
A feloldó karaktersorozat a futtatókörnyezet utasítása egy speciális karakter beszúrására, amely hatással lesz a sztring kimenetére. A C#-ban a feloldó karaktersorozat egy fordított perjellel \
kezdődik, amelyet a menekülő karakter követ. A \n
sorozat például egy új sort szúr be, a \t
sorozat pedig egy tabulátort.
Az alábbi kód feloldó karaktersorozatokat használ az új vonalak és lapok hozzáadásához:
Console.WriteLine("Hello\nWorld!");
Console.WriteLine("Hello\tWorld!");
A kód futtatásakor a következő kimenet jelenik meg:
Hello
World!
Hello World!
Mi a teendő, ha dupla idézőjelet szeretne beszúrni egy literális sztringbe? Ha nem használja a karakteres feloldósorozatot, összezavarja a fordítót, mert azt fogja hinni, hogy idő előtt le szeretné állítani a sztringet. A fordító nem fogja megérteni a második dupla idézőjel utáni karakterek rendeltetését.
Console.WriteLine("Hello "World"!");
A .NET-szerkesztő piros hullámos vonallal húzza majd alá a World
szót. Ha mégis megpróbálja futtatni a kódot, a következő kimenet jelenik meg:
(1,27): error CS1003: Syntax error, ',' expected
(1,27): error CS0103: The name 'World' does not exist in the current context
(1,32): error CS1003: Syntax error, ',' expected
A helyzet kezeléséhez használja a menekülési \"
sorozatot:
Console.WriteLine("Hello \"World\"!");
Ha a fenti kódot futtatja, a következő kimenet jelenik meg:
Hello "World"!
Mi a teendő, ha a fordított perjelet más célra kell használni, például egy fájl elérési útjának megjelenítéséhez?
Console.WriteLine("c:\source\repos");
Sajnos a C# lefoglalja a fordított perjelet a feloldósorozatokhoz, ezért a kód futtatásakor a fordító a következő hibát jeleníti meg:
(1,22): error CS1009: Unrecognized escape sequence
A problémát a \s
sorozat okozza. Ez \r
nem okoz hibát, mert ez egy érvényes menekülési sorozat egy kocsivissza. Ebben a kontextusban azonban nem szeretne kocsivisszatűnni.
A probléma megoldásához egyetlen \\
fordított perjelet jeleníthet meg.
Console.WriteLine("c:\\source\\repos");
A fordított perjel karakter kikerülésével a kívánt kimenet jön létre:
c:\source\repos
Kimenet formázása karakteres feloldósorozatokkal
Jelölje ki az összes kódot a .NET-szerkesztőben, majd a Törlés vagy a Backspace billentyű lenyomásával törölje azt.
A parancssori eszköz makettjének létrehozásához írja be a következő kódot a szerkesztőbe:
Console.WriteLine("Generating invoices for customer \"Contoso Corp\" ... \n"); Console.WriteLine("Invoice: 1021\t\tComplete!"); Console.WriteLine("Invoice: 1022\t\tComplete!"); Console.WriteLine("\nOutput Directory:\t");
Most futtassa a kódot. A kimeneti konzolon a következő eredmény jelenik meg:
Generating invoices for customer "Contoso Corp" ... Invoice: 1021 Complete! Invoice: 1022 Complete! Output Directory:
Szó szerinti sztringkonstans
A verbatim literális sztring anélkül őrzi meg az összes térköz- és egyéb karaktert, hogy fordított perjellel kellene azokat feloldanunk. Verbatim sztring létrehozásához a @
direktívát kell használni a literális sztring előtt.
Console.WriteLine(@" c:\source\repos
(this is where your code goes)");
Figyelje meg, hogy a sztring két sorra terjed ki, és a C#-utasítás által generált térközök a következő kimenetben lesznek.
c:\source\repos
(this is where your code goes)
Kimenet formázása szó szerinti sztringkonstansokkal
Adja hozzá a következő kódsort a korábban létrehozott kód alá:
Console.Write(@"c:\invoices");
Most futtassa a kódot. A következő eredmény jelenik meg, amely tartalmazza a "Kimeneti könyvtárat":
Generating invoices for customer "Contoso Corp" ... Invoice: 1021 Complete! Invoice: 1022 Complete! Output Directory: c:\invoices
Unicode-feloldó karakterek
Literális sztringekben kódolt karaktereket a \u
feloldókarakter-sorozattal is hozzáadhat, amit egy négy karakterből álló kód követ, amely az Unicode valamely karakterét jelöli (UTF-16).
// Kon'nichiwa World
Console.WriteLine("\u3053\u3093\u306B\u3061\u306F World!");
Megjegyzés:
Itt több dologra is ügyelnünk kell. Először is, néhány konzol, például a Windows-parancssor nem jeleníti meg az összes Unicode-karaktert. Ehelyett kérdőjelre cseréli ezeket a karaktereket. Emellett az itt használt példák UTF-16-os kódolásúak. Néhány karakternél UTF-32 szükséges, ezért más feloldókarakter-sorozatot kell használni. Ez egy szerteágazó téma, és ebben a modulban csak azt szeretnénk megmutatni, hogy mit lehet elvégezni. Attól függően, hogy mire van szüksége, akár nagyon hosszú időt is eltölthet azzal, hogy megtanulja hogyan lehet használni az Unicode-karaktereket az alkalmazásokban.
Kimenet formázása Unicode-feloldó karakterek használatával
A parancssori eszköz makettjének befejezéséhez hozzáad egy japán nyelvű kifejezést, amely a következőt fordítja le: "Japán számlák létrehozása". Ezután megjelenít egy szó szerinti literális sztringet, amely a felhasználó által megadható parancsot jelöli. Néhány feloldósorozatot is hozzáad a formázáshoz.
Adja hozzá a következő kódot az alkalmazáshoz:
// To generate Japanese invoices: // Nihon no seikyū-sho o seisei suru ni wa: Console.Write("\n\n\u65e5\u672c\u306e\u8acb\u6c42\u66f8\u3092\u751f\u6210\u3059\u308b\u306b\u306f\uff1a\n\t"); // User command to run an application Console.WriteLine(@"c:\invoices\app.exe -j");
A kód helyességének biztosításához hasonlítsa össze a következőkkel:
Console.WriteLine("Generating invoices for customer \"Contoso Corp\" ...\n"); Console.WriteLine("Invoice: 1021\t\tComplete!"); Console.WriteLine("Invoice: 1022\t\tComplete!"); Console.WriteLine("\nOutput Directory:\t"); Console.Write(@"c:\invoices"); // To generate Japanese invoices: // Nihon no seikyū-sho o seisei suru ni wa: Console.Write("\n\n\u65e5\u672c\u306e\u8acb\u6c42\u66f8\u3092\u751f\u6210\u3059\u308b\u306b\u306f\uff1a\n\t"); // User command to run an application Console.WriteLine(@"c:\invoices\app.exe -j");
Most futtassa a kódot. A kimeneti konzolon a következő eredmény jelenik meg:
Generating invoices for customer "Contoso Corp" ... Invoice: 1021 Complete! Invoice: 1022 Complete! Output Directory: c:\invoices 日本の請求書を生成するには: c:\invoices\app.exe -j
Összefoglalás
A literális sztringek formázásáról eddig az alábbiakat tanulta:
- A feloldókarakter-sorozatokat akkor kell használni, amikor speciális karaktert szeretnénk beszúrni egy literális sztringbe, például egy tabulátort (
\t
), egy új sort (\n
) vagy egy dupla idézőjelet (\"
). - Ha a fordított perjelet bármilyen más helyzetben szeretné használni, akkor használja a fordított perjel feloldókarakterét:
\\
. @
Az irányelv használatával hozzon létre egy szó szerinti sztringkonstanst, amely megtartja a szóközök formázását és a fordított perjelek karaktereit egy sztringben.- Ha egy sztringben Unicode-karaktereket (UTF-16) szeretne használni, használja a
\u
sorozat utáni négy karakterből álló kódot. - Előfordulhat, hogy a Unicode-karakterek az alkalmazástól függően nem nyomtathatók megfelelően.