• ベストアンサー

csvデータをレコード毎に改行させたい

タブ区切りのcsvファイルを書き出したのですが、レコード毎に改行されずに1行の長いデータになってしまいました。 この書き出し方法そのものを変更することはできません。 (iTunes8.1での「プレイリスト書き出し」です) これを27項目ごとに改行させて、Excelなどの表計算ソフトで1行が1レコードとなるようにデータを加工したいのですが、どうすればいいのでしょうか? Macユーザーなので、できればOpenOfficeなどでできる方法で教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.3

うーん、原因不明ですね。Vista環境では一応改行区切りできてます。 考えられるのはエスケープ文字(Vistaでは円マーク OS Xではバックスラッシュ) の関連でしょうか。 $buf =~ sub/(m4a|m4p)/\1\n/g; でもかわらないでしょうか。 後「CotEditor」をお使いとのことですが、このエディタの正規表現置換の 機能を利用されてみてはいかがでしょうか。 検索文字列に「(m4a|m4p)」を指定して置換文字列に「\1\n」を指定して みてください。 こちらでは、「CotEditor」は使えないのであくまで推測を域を脱しませ んが。

izayohi
質問者

お礼

できました! なんのことはない、正規表現置換だけでできたのですね。 私のプレイリストにはmp3エンコードの楽曲やビデオなんかも混じっているので、iTunesから書き出したplaylist.txtをエディタの検索で(m4a|m4p|mp3|m4v)として\1\nで置換したらできました。 最初のレコードだけは見出しの「場所」の後になっているので手動で改行しましたが、あとは問題ありませんでした。 いろいろとお手数をおかけしてすみません。本当にありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

#1です。返信が遅れ申し訳ありません。 こちらではWindowsVistaSP1、iTunes8.1のエクスポートで確認しました。 Em-Editor FREE、サクラエディタともUTF-16LE(BOMつき)でレコード区切り は空白2個になっています。 別法ですが、拡張子が「m4a」「m4p」しかないのならそれを利用できないでしょうか。 デフォルトの文字コードがUTF-8なら use utf8; use Encode; open $in,"<",ファイル名; $/=undef; $buf = <$in>; chomp $buf; close $in; Encode::from_to($buf,'UTF-16LE','UTF-8'); $buf =~ s/(\.m4a|\.m4p)/\1\n/g; $buf =~ s/\n */\n/g; print $buf; ではだめでしょうか?

izayohi
質問者

お礼

回答ありがとうございます。 今度は文字化けしませんでしたが、やはりレコードごとに改行は入りませんでした。 今回の作業はちょっと私には敷居が高すぎたようです。 いろいろとありがとうございました。

すると、全ての回答が全文表示されます。
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

OS XならPerlが使えると思います。iTuneのプレイリストのエクスポート ファイルはUTF-16LEでレコードが2個の空白で区切られているから、 use Encode; open $infile,"<","ファイル名" or die; $/=undef; $buf =<$infile>; Encode::from_to( $buf, "UTF-16LE", "shiftjis" ); @s = split( "__",$buf ); #第一引数は1バイトスペース二個です。 print join( "\n", @s ); の要領でいけませんか?

izayohi
質問者

補足

ご回答ありがとうございます。 Perlはやったことがないのですが、私なりにネットで調べて実行してみました。 しかし実行したデータがターミナル上で文字化けして表示され、レコードごとの分割もされていないようでした。 以下に実行した手順を記します。私の環境はMacOS 10.5.6です。 1.教えていただいたコードをテキストエディタ(CotEditor)に貼付けて、bunkatsu.plとして保存しました。 その際、”ファイル名"のところをiTunesのプレイリストから書き出したplaylist.txtまでのパス(/Users/******/Desktop/playlist.txt)に変更しました。 保存形式は、行末コードはCR/LF、エンコードはUnicode(UTF-8)です。 2.ターミナルから perl /Users/******/Desktop/bunkatsu.plを実行しました。 どこが悪かったのかご指摘いただけませんか? また、よければコードをド素人にもわかるように、解説していただけませんか? あと、CotEditor上でiTunes8.1から書き出したplaylist.txtを開くとエンコードがUnicode(UTF-16)で、レコードとレコードの間には、スペースが1つしか入っていないように見えるのですが、「UTF-16LEでレコードが2個の空白で区切られている」というのはどこからご判断されたのでしょうか? ド素人のため、たいへんお手数をおかけしますが、よろしくお願いします。

すると、全ての回答が全文表示されます。
このQ&Aのポイント
  • 筆まめ33と言っているのにばーじょんがわからない
  • バージョンやOSの情報と一緒に、筆まめの使い方に関する質問です
  • 態度に不満を感じながらも、質問の内容を詳細に述べています
回答を見る

専門家に質問してみよう