2003年08月08日
川俣晶の縁側ソフトウェア技術雑記total 19501 count

C#で改行を含む長い文字列定数を書く方法

Written By: 川俣 晶連絡先

 ソースコードに、改行を含む長い文字列を直接書き込んでしまいたい事例はいろいろあります。たとえば、XML文書を処理するプログラムのテストを書く場合に、テスト対象のXML文書を直接ソース中に書き込んでしまいたい場合などがあります。

 このような場合、多くのプログラム言語では、1つの文字列定数に改行を含めることができるとしても、1行が長くなりすぎるため、複数の文字列定数に分割する必要がありました。

 たとえば、以下のように書いてやる必要があったわけです。(特定のプログラム言語のソースを想定したものではありません)

"abcdefghijklmnopqrstuvexyz\r\n"

+ "abcdefghijklmnopqrstuvexyz\r\n"

+ "abcdefghijklmnopqrstuvexyz\r\n"

 もう使っていないのでうろ覚えですが。C言語はストリングコンカチネーションと言ったかどうかよく覚えていませんが、複数に分かれた文字列リテラルを結合してくれる機能があったような気もします。そういう機能があればハッピーではありますが。

 C#の場合はどうでしょうか。

 うかつな話ですが、ある重要な事実に今まで気付いていませんでした。逐語的リテラル文字列には改行を含めることができるということです。

 たとえば、以下のソースを実行させたときの出力が分かりますか?

using System;

class Class1
{
    [STAThread]
    static void Main(string[] args)
    {
        Console.Write(@"first line
next line
");
    }
}

 出力は、「first line改行next line改行」となります。

 C#には、標準リテラル文字列と逐語的リテラル文字列という2種類の文字列リテラルがあります。標準リテラル文字列とは普通に使っている""でくくるもの。逐語的リテラル文字列とは、先頭に@を付けて""でくくるものです。逐語的リテラル文字列を使うと、円記号(バックスラッシュ)をエスケープしなくても書き込めて便利なので、ファイルのパスを書くときなどに多用していましたが、実は改行も有効な文字列の一部として書き込めたわけですね。

 これまで気付かなかったとはうかつでしたが、これはなかなかクールな機能だと思います。ますますC#で快適にプログラムを書けそうです。

Facebook

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2003年
08月
12日
Windows MediaエンコーダをC#から呼び出すプログラミングのドタバタ記録
3days 0 count
total 5778 count
【技術雑記】の前のコンテンツ
2003年
07月
21日
弱い参照、WeakReferenceのIsAliveとTargetの関係
3days 0 count
total 2713 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20030808142640
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.34 (Alpha-Test) Copyright (c) 2004-2018 Pie Dey.Co.,Ltd.