IT プロフェッショナルのための技術情報サイト > フォーラム ホーム > Windows Powershell フォーラム > Windows PowerShell > 全角スペース区切りのテキストファイルをカンマ区切り(CSV)にしたい
質問する質問する
 

回答済み全角スペース区切りのテキストファイルをカンマ区切り(CSV)にしたい

  • 2009年7月23日 4:16TAKAKUN ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    お世話になります。

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

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

    powershellの勉強中でもあり、なにかpowershellでのやり方を教えていただけませんでしょうか。

回答

  • 2009年7月27日 2:50naginoMVPユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済み
    こんにちは、nagino です。

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

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

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



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

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

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

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

すべての返信

  • 2009年7月23日 4:28TAKAKUN ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    自己レスです。

    ちなみに、

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

    では、半角スペースも対象となってしまい、あと一歩でした。
  • 2009年7月24日 5:40TAKAKUN ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     

    自己レスです。

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

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

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

  • 2009年7月24日 11:53naginoMVPユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    こんにちは、nagino です。

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

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

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

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


    MCITP(Database Developer/Database Administrator)
  • 2009年7月27日 1:59TAKAKUN ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     

    ご返事ありがとうございます。

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

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

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


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

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




  • 2009年7月27日 2:50naginoMVPユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済み
    こんにちは、nagino です。

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

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

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



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

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

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

    MCITP(Database Developer/Database Administrator)
    • 回答としてマークTAKAKUN 2009年7月27日 8:27
    •  
  • 2009年7月27日 8:27TAKAKUN ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     

    ご返事ありがとうございます。

    申し訳ございません。

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

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

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

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