• ベストアンサー

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

  • CSVファイル操作

    VBでCSVを操作しているのですが、わからないことがあるので教えてください。 1.CSVファイル(改行区切り)のレコード数を取得するにはどうすればいいですか? 2.CSVファイル(改行区切り)の最初のレコードのみ削除するにはどうすればいいですか?   また、レコードを指定して削除することはできますか? 3.CSVファイル(改行区切り)のレコードを指定して内容を変更することはできますか? Windows XP , VB6

  • CSVデータをエクセルのセルに入れたい・・・

    よろしくお願いします。 CSVデータを当方ではエクセルで開いてます。 カンマ区切りごとのデータがエクセルのセルに1つずつ入力されてるので 不用データを行や列ごと削除できるので便利に使っていました。 が、他のPCでデータを同じように加工しようとしたところ、最初のセルに全て連続して入っているという状態で、上記のような作業が出来ませんでした。 5台のPCともXPでエクセル2003です。 テキスト形式・タブ区切り・カンマ区切りなどなど専門的なことが良く判っていないため、説明もうまくできませんが、PCの設定なのか?セルに1つづつ分ける方法があるのか?何でわたしのだけ? ?? 引継ぎが出来ず困っておりますのでどなたかお願いします。教えてください!!

  • Excelとcsvの改行について

    初めまして。 新規でネットショップをオープンすべく準備中の、HTML初心者です。 実店舗の経験をネットで生かそうと思い、分からないことが出てくる度に調べながらオープン準備を進め、何とか残るは商品データのUPのみという所まできました。 ショップサーブからダウンロードした一括UP用のcsvファイルがExcelで開いたので何の疑問も持たなかったのですが、保存時にエラーがでたため調べたところ、Excelの改行はcsvには反映されないことを知りました。 さらに調べて、改行したい部分に\r\n(Macは\n)もしくは、"文章"と入力すると改行が反映される。というところまで辿り着いたのですが、下記の内容で詰まっております。 (1)既に200近い商品データをExcelに入力済みです。入力済データの改行部分を、コマンド(コード?)に一括変換する方法はあるのでしょうか。 (2)例えば、文章の上下間を3行空ける(改行する)場合、入力は文章\r\n\r\n\r\n文章(Macは文章\n\n\n文章)もしくは、"文章"",",""文章"で良いのでしょうか。 (3)試しにネット上で入力した商品データ(csvファイル)をダウンロードして開くとExcelが起動し、ネット上で改行した部分が幾つものスペースで表示されます。データを壊さずにスペースを短くする方法はあるのでしょうか。 お手数ではございますが、宜しくお願い致します。

  • 項目内改行があるCSVの書式設定ができません

    お世話になります。 現在、Excel2010のVBAを使って、ある項目内に改行CRLFを含むCSVを Excelシートにコピーして加工するマクロを作成しようとしています。 CSV1レコードの例) "001","b","c","d[CR][LF] e[CR][LF] f[CR][LF] g","h" 4項目名に改行が含まれますが、1レコードあたり5項目のCSVです。 CSVをExcelに取り込むには様々な方法があると思いますが、改行を含んでいても正しく取り込める方法として、 現在は下記のようにOpenText関数を使用して読み込みを行い、シートへ貼り付けています。 Workbooks.OpenText fileName:=取り込みたいファイルの名称, StartRow:=1, _ DataType:=xlDelimited, TextQualifier:=xlTextQualifierDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _ Comma:=True, Space:=False, Other:=False, _ FieldInfo:=Array(Array(1, xlTextFormat), Array(2, xlTextFormat), _ ・・・・・・・・・・・・・・ このとき、CSVの取込自体はできるのですが、FieldInfoで指定した書式指定 (ここでは文字列をあらわすxlTextFormat)が無視されてしまい、 Excelに取り込んだときには文字列でなく標準の書式になっています。 つまり上記の例では1項目目の"001"が桁落ちして1となってしまいます。 ネットで調べたところ、OpenText関数では拡張子csvのファイルを読み込む際には FieldInfo指定が無効となるとありました。そこでファイルの拡張子を.txtに変えてみたところ、 今度は項目内改行が認識されず、行区切りの改行とみなされてしまって、項目取り込みがずれてしまいます。 なんとか、桁落ちせず、なおかつ項目内改行も正しく認識できるような方法はないでしょうか。 OpenText関数以外の方法でもかまいませんので、有識者の方々にご教授いただければ、 と思っております。 よろしくお願いします。

  • CSVから読み込んだデータの保持とソート

    お世話になっています。VB.NET+CSVに関する質問です。 現在VB.NETで、CSVから読み込んだレコードをある項目を基準に並び替え、一覧にして画面に表示するというプログラムを作っています。 こういう場合のCSVから読み込んだデータの保持の方法と、その並び替えの方法にはどういうやり方がありますか? いくつかのパターンがあると思いますが、教えてください。 以下はCSVの情報です。 ・1行が1件のレコード ・項目1を昇順で並び替える ・CSV項目:項目1(半角英数字)項目2(タブ)項目3(半角・全角文字) ・CSV件数:1000行以下

  • 改行のあるCSVファイルをExcelに読み込みたい

    CSVファイルをExcelにインポートしたいのですが CSVファイルのデータ内に改行が入っていたので、レイアウトが崩れて、 うまくExcelにインポートできない状態です。 改行を置き換えで取り除くと、すべて横並びになってしまいます。 1レコードは59項目と決まっているのですが、手作業で改行を入れるのは 数が多く難しそうです。 なんとかうまく取り込む方法はないでしょうか? プログラミングは全くわかっていない初心者ですが、 エクセルのVBAにコピペして実行することは可能です。。。 カテ違いだったらすみません><

  • CSVファイルをperlプログラムで処理する場合

    すみません、度々perl初心者のものです。 CSVファイルを1行ずつ読み込んで処理をしたい場合、 1項目内のデータの中に改行がある場合、 どのような方法で対処出来るでしょうか? 例えば "aaa,bbb,ccc ddd,eee,fff" 上記のようにcccとdddの間に改行が入ってるため 本当は1レコードのはずなのに2レコードとして 処理を行ってしまう。 perlで何かやり方はあるのでしょうか? csvを加工するのもよいのですが、データが多量に あるため、プログラム上でなんとかしたいと思うのですが。。。 すみません、宜しくお願い致します。

    • ベストアンサー
    • Perl
  • accessのレコードデータをPostgreSQLに移行したい

    accessのレコードデータをpostgreSQLに移行したいと考えています。 accessのデータをcsvファイルにエクスポートしてからposgresSQLで インポートしようと考えていました。 しかしレコードの中にEnter(改行コード)があるので、csvに変換して しまうとレコードの件数以上に行数ができてしまい、postgresSQLで インポートがうまくできませんでした。 accessのレコードにある改行コードを他の文字に変換するしか posgreSQLに移行する方法はございませんでしょうか? できれば改行コードもそのまま移行したいと考えておりますが 何か良い方法があればご教授頂ければと思います。 よろしくお願いします。

  • csvファイル改行コードの置換について

    お世話になります。 csvファイルで作成したデータを出力表示させるスクリプトで csvファイル内の改行コード(セル内)以後のデータが出力できません。 下記の置換で改行コード以後のデータが表示されません。 $abc =~ s/\r\n//g; $abc =~ s/\n//g; $abc =~ s/\r//g; csvファイル内の改行の数が多く、1行のデータが改行の為に、2行になったりしているので出力前に置換し表示させる方法です。 csvファイル作成時につく""は正常に置換しています。 似たような質問もあったのですが、少し違うようですので質問いたしました。 何卒、ご教授お願いいたします。

    • ベストアンサー
    • Perl
  • phpMyadminのCSV抽出時の改行コード

    さくらのレンタルサーバを利用しています そのサーバにあるphpMyadminの利用での質問です さくらサーバのデータを1レコードCSVでエクスポートした時、テキストエディターで そのデータをみた時、本来、1行で表示されるべき所が複数行になってみえています。 よくみると、さくらサーバ側のあるフィールドで改行して表示させている所が エディター側で改行されているようです CSVにエクスポート時にどこか指定する所がありきちんとみえるようになるのでしょうか よろしくお願いします。

    • ベストアンサー
    • MySQL