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

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

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

Re[1]: C# テキストファイル内の半角の文字列を変換


(過去ログ 107 を表示中)

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

■64064 / inTopicNo.1)  C# テキストファイル内の半角の文字列を変換
  
□投稿者/ じゃむ (1回)-(2012/11/06(Tue) 20:59:41)

分類:[.NET 全般] 

始めまして。最近C#を始めたもので、開発環境はビジュアルスタディオエクスプレス2010になります。
c#でテキストファイルを一文字づつ読み込み、半角の文字列の前後に特定の語をつけて全角に変換したいです。
この時、半角の文字、一つ一つではなく、半角の文字列をそのまま全角の文字列に変換し、尚且つその前後に特定の語を付与したいです。
具体的には、文字列が

あいueおk

の場合、

あい@u@@e@お@k@ (@は仮の前後につける文字

ではなく、

あい@ue@お@k@

のような形で変換します。

イメージとしては、テキストファイルを一文字づつ読み、文字が半角が全角か判定
半角であれば次の文字も判定、その次が全角ならば前の半角も文字列を変換して、その次の次の文字の判定に移る
と考えていますが、文字を解析し、半角か全角か判定した後、次の文字の判定に移るルーチンが組めずに困っています。

何卒、ご教授宜しくお願いします。
引用返信 編集キー/
■64066 / inTopicNo.2)  Re[1]: C# テキストファイル内の半角の文字列を変換
□投稿者/ 魔界の仮面弁士 (78回)-(2012/11/06(Tue) 22:23:17)
No64064 (じゃむ さん) に返信
> 開発環境はビジュアルスタディオエクスプレス2010になります。

Visual Studio 2008 以降においては、『ビジュアル スタジオ』が正しい読みです。

Visual Studio 2005 以下(.NET 2003、.NET 2002、VS6、VS97)の頃は
『ビジュアル スタディオ』だったのですけれどね。

※Visual Studio日本語版の製品パッケージに、上記カタカナ読みが記載されています。


> c#でテキストファイルを一文字づつ読み込み、半角の文字列の前後に特定の語をつけて全角に変換したいです。

Unicode ベースになると、全角/半角の定義がややこしいことになってきますが、
使用する文字は、Shift_JIS 相当のものだけという前提でよろしいでしょうか?
それとも、あらゆる文字が入力されてくる可能性があるのでしょうか。


string f1 = "\uFF5F";    // 全角左白括弧
string h1 = "\u2985";    // 半角左白括弧

string f2 = "\uFFE6";    // 全角ウォン記号
string h2 = "\u20A9";    // 半角ウォン記号

string f3 = "\u3158";    // 全角ハングルWA
string h3 = "\uFFCD";    // 半角ハングルWA

string f4 = "\u2192";    // 全角右矢印
string h4 = "\uFFEB";    // 半角右矢印



> この時、半角の文字、一つ一つではなく、半角の文字列をそのまま全角の文字列に変換し、尚且つその前後に特定の語を付与したいです。
その「特定の語」が、変換元の文字列に含まれていた場合はどうしますか?


> あい@u@@e@お@k@ (@は仮の前後につける文字
> ではなく、
> あい@ue@お@k@
> のような形で変換します。

前者への返還までは出来ているのなら、
 string a = "あい@u@@e@お@k@";
 string b = a.Replace("@@", "")
のようにして置き換える手はありますけれどね。


> 文字を解析し、半角か全角か判定した後、
全角への変換は、下記の方法でできますね。
http://dobon.net/vb/dotnet/string/strconv.html


> 次の文字の判定に移るルーチンが組めずに困っています。
string source = "あいueおk";
foreach (char item in source)
{

}

のように、文字を char 型で受け取れば、順に処理できると思います。



> 何卒、ご教授宜しくお願いします。
http://www.tt.rim.or.jp/~rudyard/torii009.html
http://blogs.wankuma.com/jeanne/archive/2005/11/24/19566.aspx


こんな方法もあります。


// using Microsoft.VisualBasic;
// using System.Text.RegularExpressions;

string source = "あいueおk";

string pattern = "[\u0020-\u007E\uFF61-\uFF9F]+";

string result = Regex.Replace(source, pattern,
    m => "@" + Strings.StrConv(m.Value, VbStrConv.Wide, 0) + "@"
);

Console.WriteLine(result);  //『あい@ue@お@k@』

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -