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

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

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

Re[4]: 改行コードの置換


(過去ログ 35 を表示中)

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

■17489 / inTopicNo.1)  改行コードの置換
  
□投稿者/ たか (4回)-(2008/04/25(Fri) 16:56:33)

分類:[VB.NET/VB2005] 

改行コードの置換で困っています。
WindowsイベントログをCSV形式で出力し、加工しやすいように
次の手順で1イベント一行に使用としております。

 (1)200 → !200 に置換
 (2)改行 → 半角スペースに置換
 (3)200! → 改行 + 200に置換

上記を手順を以下のようにコーディングしました。
前提としてIO.StreamReaderを使用してShift-JISで元のCSVを読み込んでいます。

Do Until EventLogReader.EndOfStream
  StrEventLogRecord = EventLogReader.ReadLine()
StrEventLogRecord = Regex.Replace(StrEventLogRecord, "200", "!200", RegexOptions.IgnoreCase)
StrEventLogRecord = Regex.Replace(StrEventLogRecord, vbNewLine, " ", RegexOptions.IgnoreCase)
StrEventLogRecord = Regex.Replace(StrEventLogRecord, "!200", vbCrLf & "200", RegexOptions.IgnoreCase)
EventLogReplaceWriter.WriteLine(StrEventLogRecord)
Loop

結果、改行コードが半角スペースに変換されません。
改行コードの置換方法を教えてください。
よろしくお願いします。


引用返信 編集キー/
■17490 / inTopicNo.2)  Re[1]: 改行コードの置換
□投稿者/ ネタ好き (152回)-(2008/04/25(Fri) 17:04:38)
No17489 (たか さん) に返信
> 改行コードの置換で困っています。
> WindowsイベントログをCSV形式で出力し、加工しやすいように
> 次の手順で1イベント一行に使用としております。
>
>  (1)200 → !200 に置換
>  (2)改行 → 半角スペースに置換
>  (3)200! → 改行 + 200に置換
>
> 上記を手順を以下のようにコーディングしました。
> 前提としてIO.StreamReaderを使用してShift-JISで元のCSVを読み込んでいます。
>
> Do Until EventLogReader.EndOfStream
>   StrEventLogRecord = EventLogReader.ReadLine()
> StrEventLogRecord = Regex.Replace(StrEventLogRecord, "200", "!200", RegexOptions.IgnoreCase)
> StrEventLogRecord = Regex.Replace(StrEventLogRecord, vbNewLine, " ", RegexOptions.IgnoreCase)
> StrEventLogRecord = Regex.Replace(StrEventLogRecord, "!200", vbCrLf & "200", RegexOptions.IgnoreCase)
> EventLogReplaceWriter.WriteLine(StrEventLogRecord)
> Loop
>
> 結果、改行コードが半角スペースに変換されません。
> 改行コードの置換方法を教えてください。
> よろしくお願いします。
>
>

あまり詳しくは検討していないけど、ひとまずvbNewLineをvbCrLfにして実験してみるのがいいと思う。
それと文字のエンコードが正しいのチェックしたら言いと思う。
引用返信 編集キー/
■17496 / inTopicNo.3)  Re[2]: 改行コードの置換
□投稿者/ 癒耶 (3回)-(2008/04/25(Fri) 17:23:05)
2008/04/25(Fri) 17:35:38 編集(投稿者)
2008/04/25(Fri) 17:35:13 編集(投稿者)
2008/04/25(Fri) 17:35:05 編集(投稿者)

>  (1)200 → !200 に置換
>  (2)改行 → 半角スペースに置換
>  (3)200! → 改行 + 200に置換
     ~~~~
このルールだと
StrEventLogRecord = Regex.Replace(StrEventLogRecord, "!200", vbCrLf & "200", RegexOptions.IgnoreCase)
のところが間違えている気がしますが。ちゃんと確認しましたか?
「(3)!200 → 改行 + 200」でいいのでしょうか?
    ~~~~
↑のルールだとして
(1)で置換したものにも置換を適用して良いのでしょうか?

とりあえず単純に改行を置換したいのであれば
正規表現の\nを使用すれば出来ると思います。
StrEventLogRecord = Regex.Replace(StrEventLogRecord, "\n", " ", RegexOptions.IgnoreCase)
引用返信 編集キー/
■17500 / inTopicNo.4)  Re[3]: 改行コードの置換
□投稿者/ たか (5回)-(2008/04/25(Fri) 18:04:09)
No17496 (癒耶 さん) に返信

申し訳ございません。記述ミスでした。
(3)は!200 → 改行 + 200に変換します。

Windowsイベントログは各レコードが
 2008/04/25,17:00,・・・・・
と記載されるので、
(1)の部分では、レコードの最初という目印で2008の前に!を付加しています。
(2)の部分では、1レコードが複数行で出力されている部分もあるので、改行コードを
   削除し、1行で全レコードを出力しています。
(3)採取的に、1行ごとに各レコードを出力させるために(1)で付加した!の前に
   改行を入れて、!を削除しています。

まあこの方法だと、各レコードの途中に”200”という文字列があれば問題ですね・・・
正規表現で判別するべきなのかな・・・

アドバイスありがとうございます。正規表現に直してトライしてみます。
ありがとうございました。




> 2008/04/25(Fri) 17:35:38 編集(投稿者)
> 2008/04/25(Fri) 17:35:13 編集(投稿者)
> 2008/04/25(Fri) 17:35:05 編集(投稿者)
>
>> (1)200 → !200 に置換
>> (2)改行 → 半角スペースに置換
>> (3)200! → 改行 + 200に置換
>      ~~~~
> このルールだと
> StrEventLogRecord = Regex.Replace(StrEventLogRecord, "!200", vbCrLf & "200", RegexOptions.IgnoreCase)
> のところが間違えている気がしますが。ちゃんと確認しましたか?
> 「(3)!200 → 改行 + 200」でいいのでしょうか?
>     ~~~~
> ↑のルールだとして
> (1)で置換したものにも置換を適用して良いのでしょうか?
>
> とりあえず単純に改行を置換したいのであれば
> 正規表現の\nを使用すれば出来ると思います。
> StrEventLogRecord = Regex.Replace(StrEventLogRecord, "\n", " ", RegexOptions.IgnoreCase)
引用返信 編集キー/
■17505 / inTopicNo.5)  Re[4]: 改行コードの置換
□投稿者/ 癒耶 (4回)-(2008/04/25(Fri) 19:28:32)
ごめんなさい少し気になったので…。
Regex.Replaceを使っている時点でパターン部分は正規表現として扱われているという事はご存知ですか?
正規表現じゃないReplaceもあるので状況に応じて使いわけましょう。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -