C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: C# から xdoc2txt を使いたいのですが…


(過去ログ 129 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■76369 / inTopicNo.1)  C# から xdoc2txt を使いたいのですが…
  
□投稿者/ bubu501 (1回)-(2015/07/02(Thu) 23:55:20)

分類:[C#] 

 C#初心者です。色々調べたのですが、自力では解決できませんでした。
どうか、ご教授下さい。

 バイナリ文書からテキストを抽出するツール「xdoc2txt」
http://ebstudio.info/home/xdoc2txt.html
をC#から使いたく、以下の様なコードを書きました。

OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = false;
p.StartInfo.CreateNoWindow = true;
string cmd = @"/c xdoc2txt" + ofd.FileName +" > output.txt";
p.StartInfo.Arguments = @cmd;
p.Start();

 このコードの場合、指定したファイルによっては問題なく動くのですが、
パスの中に空白が入ると正常に動作しません。xdoc2txtのマニュアルによると、
「パスが空白を含む場合は""で囲む必要がある」と書いてありますが、その書き方が分かりません。

string cmd = @"/c xdoc2txt" + """ + ofd.FileName + """ + " > output.txt";

これだとエラーが出て、ビルドできませんでした。

 過去ログ74に参考になる質問があったのですが、読んでも良く分かりませんでした。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=43372&KLOG=74
よろしくお願いします。

引用返信 編集キー/
■76370 / inTopicNo.2)  Re[1]: C# から xdoc2txt を使いたいのですが…
□投稿者/ bubu501 (2回)-(2015/07/03(Fri) 01:01:51)
済みません。自己解決しました。

C#は string str = "\"" ;

という書き方があるのですね。失礼しました。
解決済み
引用返信 編集キー/
■76373 / inTopicNo.3)  Re[2]: C# から xdoc2txt を使いたいのですが…
□投稿者/ 魔界の仮面弁士 (393回)-(2015/07/03(Fri) 10:41:16)
以下は蛇足情報につき、解決済みチェックはつけたままにしておきます。


■No76369 (bubu501 さん) に返信
> C#初心者です。
言語名は「C#」であって「C#」では無かったりします。


国内においては、日本工業規格 JIS X 3015 "プログラミング言語C#" の
序文 6 [頭字語及び略語] の項において、
》 C#は,“しーしゃーぷ”と発音する。 
》 C#は,LATIN CAPITAL LETTER C (U+0043)の次に NUMBER SIGN # (U+0023)を書く。
と明記されています。


また、上記文書の基となった ECMA-334 "C# Language Specification" や、対を成す
ISO/IEC 23270:2006 "Information technology -- Programming languages -- C#" でも、
JIS 規格同様の Introduction 6. [Acronyms and abbreviations] の項において、
》 The name C# is pronounced “C Sharp”.
》 The name C# is written as the LATIN CAPITAL LETTER C (U+0043) followed by the NUMBER SIGN # (U+0023).
と定義されています。


ちなみに
「C」は 'FULLWIDTH LATIN CAPITAL LETTER C' (U+FF23)
「#」は 'FULLWIDTH NUMBER SIGN' (U+FF03)
「♯」は 'MUSIC SHARP SIGN' (U+266F)
です。



■No76370 (bubu501 さん) に返信
> C#は string str = "\"" ;
> という書き方があるのですね。失礼しました。

もしくは、
 string str = @"""";   // @"〜〜〜" による逐語的文字列リテラル
と書くこともできます。


「"」の一文字を表すために、このようないろいろな書き方があります。

textBox1.Text = @"""";      // @"〜〜" 形式の逐語的文字列リテラル内では、「""」と連記します。
textBox2.Text = "\"";       // 文字列リテラル内では、「\"」とエスケープ表記します。
textBox3.Text = "\u0022";   // 「\u + 4桁の16進数」による Unicodeエスケープシーケンス表記です。
                            // サロゲートペアの Unicode 文字の場合は、「\U + 8桁の16進数」です。
textBox4.Text = "\x22";     // 「\x + 可変長の16進数」による Unicodeエスケープシーケンス表記です。



もしも、「"C:\Program Files\"」という文字列なら、こんな感じです。


// 逐次的文字列リテラル。ファイルパスや改行入り文字列では、よく使われる記述です。
textBox1.Text = @"""C:\Program Files\""";

// 通常文字列リテラル。今回使用されたのはこのパターンですね。
textBox2.Text = "\"C:\\Program Files\\\"";

// Unicode エスケープ。あまり見かけない表現ですが、外国語の文字表現などに役立ちます。
textBox3.Text = "\u0022C:\u005cProgram Files\u005c\u0022";

// 可変長 Unicode エスケープ。char リテラルなら良いですが、string リテラルでは注意が必要です。
textBox4.Text = "\x22" + "C:\x5cProgram Files\x5c\x22";
// 下記は NG なので注意してください。先頭文字が "\u02C" と誤解されてしまいます。
// textBox4.Text = "\x22C:\x5cProgram Files\x5c\x22";

// 各種エスケープ表記の混在も可能です
textBox5.Text = "\"C:\\Program Files\u005c\x22";


https://msdn.microsoft.com/ja-jp/library/aa691090.aspx
https://msdn.microsoft.com/ja-jp/library/362314fe.aspx

解決済み
引用返信 編集キー/
■76375 / inTopicNo.4)  Re[3]: C# から xdoc2txt を使いたいのですが…
□投稿者/ furu (14回)-(2015/07/03(Fri) 16:04:46)
No76373 (魔界の仮面弁士 さん) に返信
> textBox3.Text = "\u0022";   // 「\u + 4桁の16進数」による Unicodeエスケープシーケンス表記です。
>                             // サロゲートペアの Unicode 文字の場合は、「\U + 8桁の16進数」です。

正しく動作しているようなので

textBox5.Text = "\U00000022";

もありですか?

解決済み
引用返信 編集キー/
■76381 / inTopicNo.5)  Re[4]: C# から xdoc2txt を使いたいのですが…
□投稿者/ 魔界の仮面弁士 (394回)-(2015/07/03(Fri) 19:37:58)
No76375 (furu さん) に返信
> textBox5.Text = "\U00000022";

はい。4 桁以下に収まる Unicode 第0面(BMP)の範囲の文字であっても
\U による 8桁表記を使って問題ありません。

 textBox1.Text = "\U00000022";
 textBox2.Text = "\u0022";
 textBox3.Text = "\x0022";
 textBox4.Text = "\x22";

とはいえ、\U が本当に必要とされるのは、第1面〜第16面の範囲の文字を
記述するときです。普段使うのは BMP の範囲の文字だけでしょうから、
その場合は \u で十分であり、\U で書くのは冗長的ですね。
(そもそも、\u でさえ滅多にお目にかからないでしょうけれども…)


もちろん、それら追加面の文字をサロゲートペアを使って記述することも可能です。

U+10000〜U+10FFFF の範囲の Unicode 文字であっても、
D800〜DBFF と DC00〜DFFF の範囲の 2 文字をペアで記述すれば、
\U を使わずとも、\u (あるいは \x)を 2 回用いて表現できます。


 textBox1.Text = "\U00029E49"; // U+29E49 の文字
 textBox2.Text = "\uD867\uDE49"; // 上記のサロゲートペア表現
解決済み
引用返信 編集キー/
■76382 / inTopicNo.6)  Re[5]: C# から xdoc2txt を使いたいのですが…
□投稿者/ furu (15回)-(2015/07/03(Fri) 19:56:10)
No76381 (魔界の仮面弁士 さん) に返信
> ■No76375 (furu さん) に返信
>>textBox5.Text = "\U00000022";
>
> はい。4 桁以下に収まる Unicode 第0面(BMP)の範囲の文字であっても
> \U による 8桁表記を使って問題ありません。
>

魔界の仮面弁士 さん

詳細にわかりやすく解説して頂き、
恐縮してしまいます。
ありがとうございました。
解決済み
引用返信 編集キー/
■76384 / inTopicNo.7)  Re[6]: C# から xdoc2txt を使いたいのですが…
□投稿者/ bubu501 (3回)-(2015/07/04(Sat) 01:38:21)
魔界の仮面弁士 さん

有益な情報をありがとうございます。
勉強になります。

言語名は表記が細かく定義されているのですね。
今まで好い加減に書いていました。
気をつけます…

今後ともよろしくお願いします。
ご教授ありがとうございました。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -