none
全角スペース区切りのテキストファイルをカンマ区切り(CSV)にしたい RRS feed

  • 質問

  • お世話になります。

    サーバー保守(客先のサーバ)のためイベントログを出力して持ち帰り解析を行うことになったのですが、
    担当者がテキストファイルで保存してきたおり、区切り文字が全角スペースとなっておりました。

    powershellを使用してCSVに変換するためにいろいろと試してみたのですが、全角スペースがヒットしません。
    全角スペースの正規表現がうまくつくれないのかだめです。

    powershellの勉強中でもあり、なにかpowershellでのやり方を教えていただけませんでしょうか。
    2009年7月23日 4:16

回答

  • こんにちは、nagino です。

    通常の全角スペースであれば、先述のコマンドで問題ないはずです。
    実際提示したサンプルでは動作しているとのことですので、処理したいファイルの方に問題があるのかもしれません。

    問題となっているファイルは、どの文字コードで保存されていますでしょうか。
    また、全角スペースの前後は制御コードなど入っていませんでしょうか。

    一度、文字コードのレベルで全角スペースの前後を確認されたほうがよろしいかと思います。



    なお、念のための確認ですが、「タブでは無く全角空白」ということで相違ありませんでしょうか。
    一応参考までに、タブの場合は

    Get-Content 'アプリケーション ログ.txt' | %{$_ -replace "[\t]", ","}

    でカンマに置換できます。

    MCITP(Database Developer/Database Administrator)
    • 回答としてマーク TAKAKUN 2009年7月27日 8:27
    2009年7月27日 2:50

すべての返信

  • 自己レスです。

    ちなみに、

    gc 'アプリケーション ログ.txt' | %{$_ -replace "[ \s]+",","}

    では、半角スペースも対象となってしまい、あと一歩でした。
    2009年7月23日 4:28
  • 自己レスです。

    いろんなパターンを試してみたが全角スペースだけをヒットさすことができない。
    半角スペースが含まれてしまう。
    ただ、半角スペースだけを認識することが可能なので、半角スペースを削除してから全角スペースを
    カンマに置換することで、体裁は整いそうなので今回はこれで対応することにしました。

    gc 'アプリケーション ログ.txt' | %{$_ -replace "( ){1,}",""}| %{$_ -replace "[\s]",","}

    なにか他にアイディア等があれば教えてください。

    2009年7月24日 5:40
  • こんにちは、nagino です。

    Windows XP SP3 上の PowerShell 1.0 上でですが、以下でいけるようです。

    Get-Content 'アプリケーション ログ.txt' | %{$_ -replace "[ ]", ","}

    [ と ] の間は全角スペースです。
    半角スペースは置換されていなかったので、大丈夫かと思います。
    ちなみに、以下のようなファイルで試してみました。

    --ここから-------------
    あいうえお かきくけこ さしすせそ
    た ち つ
    にゃ にゃ にゃ
    半角 スペース ですよ ←は全角 です
    --ここまで-------------


    MCITP(Database Developer/Database Administrator)
    2009年7月24日 11:53
  • ご返事ありがとうございます。

    下記のサンプルでは、確かに下記のコマンドで、全角半角の区別を行っているみたいです。
    いただいたサンプルでは正しく変換されていました。

    Get-Content 'アプリケーション ログ.txt' | %{$_ -replace "[ ]", ","}
    --ここから-------------

    あいうえお かきくけこ さしすせそ
    た ち つ
    にゃ にゃ にゃ
    半角 スペース ですよ ←は全角 です
    --ここまで-------------


    ただ、アプリケーション ログ.txtでは、変換しませんでした。

    XPSP3+powershell1.0と同じ環境のようなんですが。。。。




    2009年7月27日 1:59
  • こんにちは、nagino です。

    通常の全角スペースであれば、先述のコマンドで問題ないはずです。
    実際提示したサンプルでは動作しているとのことですので、処理したいファイルの方に問題があるのかもしれません。

    問題となっているファイルは、どの文字コードで保存されていますでしょうか。
    また、全角スペースの前後は制御コードなど入っていませんでしょうか。

    一度、文字コードのレベルで全角スペースの前後を確認されたほうがよろしいかと思います。



    なお、念のための確認ですが、「タブでは無く全角空白」ということで相違ありませんでしょうか。
    一応参考までに、タブの場合は

    Get-Content 'アプリケーション ログ.txt' | %{$_ -replace "[\t]", ","}

    でカンマに置換できます。

    MCITP(Database Developer/Database Administrator)
    • 回答としてマーク TAKAKUN 2009年7月27日 8:27
    2009年7月27日 2:50
  • ご返事ありがとうございます。

    申し訳ございません。

    >なお、念のための確認ですが、「タブでは無く全角空白」ということで相違ありませんでしょうか。
    >一応参考までに、タブの場合は
    >Get-Content 'アプリケーション ログ.txt' | %{$_ -replace "[\t]", ","}
    >でカンマに置換できます。

    調べてみたらタブでした。使っているテキストエディタのデフォルト設定が、
    全角スペースとタブの表示方法が同じで、全角スペースとおもいこんでおりました。

    まことにすいませんでした。上記の方法で変換できました。

    ありがとうございました。

    2009年7月27日 8:27