記事のテキストデータから文字列を抽出する方法

このQ&Aのポイント
  • 昔使っていたブログのデータをまとめたテキストファイルから、必要な文字列を取り出す方法をご紹介します。
  • Javascriptを使って、記事ごとに必要な文字列のみを取り出し、CSV形式に整形することができます。
  • 改行部分はHTMLのタグである<br>に置き換えることで、テキストファイルの改行を反映させることもできます。
回答を見る
  • ベストアンサー

テキストデータから文字列を取り出したい

昔使っていたブログのデータをまとめたテキストファイル(決まった体裁にはなっています)があります。 そこから記事ごとに必要な文字列のみを取り出し、CSVにしたいです。 例えばtextareaなどにテキストを全て貼り付け、Javascriptを使い、必要な文字列のみを出力させたいのですが、どういうコードにすればいいか教えて下さい。 (改行部分のみ<br>に置き換え希望) <現在の文字列 ここから> -------- AUTHOR: hogehoge TITLE: 記事A STATUS: Publish ALLOW COMMENTS: 0 CONVERT BREAKS: __default__ ALLOW PINGS: 0 PRIMARY CATEGORY: news CATEGORY: news DATE: 02/08/2014 06:17:55 AM ----- BODY: 記事一個目。 ほげほげ ----- EXTENDED BODY: ----- EXCERPT: ----- KEYWORDS: ----- -------- AUTHOR: hogehoge TITLE: 記事B STATUS: Publish ALLOW COMMENTS: 0 CONVERT BREAKS: __default__ ALLOW PINGS: 0 PRIMARY CATEGORY: nikki CATEGORY: nikki DATE: 02/09/2014 07:45:04 PM ----- BODY: 記事2個目。 <img src="hoge.jpg"> ほげほげ ----- EXTENDED BODY: ----- EXCERPT: ----- KEYWORDS: ----- -------- AUTHOR: hogehoge TITLE: 記事C STATUS: Publish ALLOW COMMENTS: 0 CONVERT BREAKS: __default__ ALLOW PINGS: 0 PRIMARY CATEGORY: news CATEGORY: news DATE: 02/09/2014 07:51:34 PM ----- BODY: 記事3個目。ほげほげ ----- EXTENDED BODY: ----- EXCERPT: ----- KEYWORDS: ----- <文字列ここまで> <上記から抽出し、出力したい内容(カンマ区切りのcsvにするため) ここから> 記事A,news,02/08/2014 06:17:55 AM,記事一個目。<br>ほげほげ 記事B,nikki,02/09/2014 07:45:04 PM,記事2個目。<br><img src="hoge.jpg"><br>ほげほげ 記事C,news,02/09/2014 07:51:34 PM,記事3個目。ほげほげ <内容ここまで> よろしくお願いいたします。

  • cnkozo
  • お礼率39% (158/402)

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

  • ベストアンサー
  • think49
  • ベストアンサー率59% (285/482)
回答No.2

CSVファイルを生成する場合、「改行」(\r\n)「ダブルクォート(")」「カンマ(,)」の3文字の扱いに気を付ける必要があります。 改行は <br> に変換するようですが、残り2文字のエスケープに注意してください。 https://jsfiddle.net/67byzuho/ 2列目で [PRIMARY CATEGORY], [CATEGORY] のどちらを期待しているのか不明ですが、[CATEGORY] としました。 Re: cnkozo さん

cnkozo
質問者

お礼

遅くなり、申し訳ございませんでした。ありがとうございました!

その他の回答 (1)

回答No.1

おぶじぇくとしこうには、かいとうがつくの にこれには つきませんね。 しつもんのかいとうがつくまでに、てさぎょうでおわっているかもしれませんね。 こうきのうな えでぃたなら 正規表現でへんかんできそうなのですが。 ぜんかくくうはくもじは、すべてはんかくくうはくもじに ちかんしてください だぶるくぉーとで かこまなくてもだいじょうぶ? <!DOCTYPE html> <meta charset="utf-8"> <title>高機能なエディタなら…</title> <style > </style> <body> <textarea rows="15" cols="90" id="A"> -------- AUTHOR: hogehoge TITLE: 記事A STATUS: Publish ALLOW COMMENTS: 0 CONVERT BREAKS: __default__ ALLOW PINGS: 0 PRIMARY CATEGORY: news CATEGORY: news DATE: 02/08/2014 06:17:55 AM ----- BODY: 記事一個目。 ほげほげ ----- EXTENDED BODY: ----- EXCERPT: ----- KEYWORDS: ----- -------- AUTHOR: hogehoge TITLE: 記事B STATUS: Publish ALLOW COMMENTS: 0 CONVERT BREAKS: __default__ ALLOW PINGS: 0 PRIMARY CATEGORY: nikki CATEGORY: nikki DATE: 02/09/2014 07:45:04 PM ----- BODY: 記事2個目。 <img src="hoge.jpg"> ほげほげ ----- EXTENDED BODY: ----- EXCERPT: ----- KEYWORDS: ----- -------- AUTHOR: hogehoge TITLE: 記事C STATUS: Publish ALLOW COMMENTS: 0 CONVERT BREAKS: __default__ ALLOW PINGS: 0 PRIMARY CATEGORY: news CATEGORY: news DATE: 02/09/2014 07:51:34 PM ----- BODY: 記事3個目。ほげほげ ----- EXTENDED BODY: ----- EXCERPT: ----- KEYWORDS: ----- </textarea><br> <input type="button" value="conv" onclick="hoge();"> <hr> <textarea rows="15" cols="90" id="B"> </textarea> <script> function addDQ (str) {  return '"' + str + '"'; } function hoge () {  var t = document.querySelector ('#A').value;  var b = document.querySelector ('#B');  var rst = [];  var rec = [];    var cr = '\\r|\\n|\\r\\n';  var CR = '(?:' + cr + ')*';    var sp = '\\s?';  var splt8 = '\\-{8}' + CR;  var splt5 = '\\-{5}' + CR;  var typeA = sp + '.*?' + CR;  var typeB = sp + '(.*?)' + CR;  var typeC = sp + '((?:.|' + cr + ')*?)' + CR;  var typeE = sp + '(?:.|' + cr + ')*?' + CR;    var pattern = [   splt8,   'AUTHOR:' + typeA,   'TITLE:' + typeB,   'STATUS:' + typeA,   'ALLOW COMMENTS:' + typeA,   'CONVERT BREAKS:' + typeA,   'ALLOW PINGS:' + typeA,   'PRIMARY CATEGORY:' + typeA,   'CATEGORY:' + typeB,   'DATE:' + typeB + splt5,   'BODY:' + CR + typeC + splt5,   'EXTENDED BODY:' + CR + typeE + splt5,   'EXCERPT:' + CR + typeE + splt5,   'KEYWORDS:' + CR + typeE + splt5,   typeE  ].join ('');  var reg = new RegExp (pattern, 'g');    for (rec = []; rec = reg.exec (t); ) {   rec.shift ();   rst.push (rec);  }    b.value = rst.map (function (a) {   a[3] = a[3].replace (/(\r|\n|\r\n)/g, '<br>');   return a.map (addDQ).join(', ');  }).join ('\n');   } </script>

cnkozo
質問者

お礼

遅くなり、申し訳ございませんでした。ありがとうございました!こちらもできました。

関連するQ&A

  • WordPress3.0にMovableType形式のデータをインポー

    WordPress3.0にMovableType形式のデータをインポートしたのですが、タグがインポートされませんでした。 下記のようなフォーマットですが、タグはインポートできないのでしょうか? AUTHOR: Foo Bar TITLE: A dummy title BASENAME: filename STATUS: Publush ALLOW COMMENTS: 1 ALLOW PINGS: 1 CONVERT BREAKS: richtext PRIMARY CATEGORY: News CATEGORY: News CATEGORY: Product DATE: 08/08/2007 03:00:00 PM TAGS: "Movable Type",foo,bar

  • FC2からMovable Typeへのログの移転について

    このたび、FC2のブログからレンタルサーバーを使用したMovable Typeへブログを移転しようと思い、ログを移転すべく色々作業していたのですが、FC2からログをテキストファイルでエクスポートし、文字コード等をチェックして、MTへインポートしようとしました。 文字化け等も無く文章自体は正常にインポートされたのですが、 改行が反映されず文章が非常に見づらい状態となってしまいます。 MTでのインポート時に設定で「テキストフォーマット:改行を反映」 にしてみたのですが、これを反映しても変化ありません。 インポートを試みたログのフォーマットは以下の通りです AUTHOR: ●●● TITLE: ▲▲▲ STATUS: Publish ALLOW COMMENTS: 1 CONVERT BREAKS: default ALLOW PINGS: 1 PRIMARY CATEGORY: 未分類 CATEGORY: 未分類 DATE: XX/XX/2XXX XX:XX:XX ----- BODY: ★★★★ ■■■■ 凸凸凸凸 FC2で編集していた時は、設定で「自動改行」を有効にしていたため 改行するときは「<br>」タグなどを使わなくても勝手に改行して くれましたが、MTなどへログを移転する場合は、すべて手作業で 文末にbrタグを入れていかなければならないのでしょうか? それとも、MT側で何か設定があるのでしょうか?

  • htmlファイルがNot Found???

    いつもお世話になりありがとうございます。 標記の件。 添付の様に、htmlファイルがNot Found? となります。 表示させたいのです。 どうしたらいいのでしょうか??? 度々申し訳ございません。 アドバイスの程、宜しくお願い申し上げます。    記 <body> <div class="v_line_fix"> <h1>Blog K・T</h1> <h2><a href="index.html">トップページ</a></h2> <?php if( $mode=='input'){ ?> <h1>ブログフォーム</h1> <form action=blog_create.php method=POST> ブログタイトル<br> <input type="text" name="title"><br> ブログ本文<br> <textarea name="content" id="content" cols="30" rows="80"></textarea><br> カテゴリー<br> <select name="category"> <option value="1">日常</option> <option value="2">非日常</option> <option value="3">その他</option> </select> <br> <input type="radio" name="publish_status" value="1" checked>公開 <input type="radio" name="publish_status" value="2" checked>非公開 <br> <input type="submit" value="送信"> </form> <p><a href="/">戻る</a></p> </body>

    • ベストアンサー
    • PHP
  • if構文の中で更に条件分岐をしたい

    ニュース記事を下記のようにカテゴリ別に表示しています。 while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ if($rec['category'] == 1){ echo '<a href="'.$rec['url'].'" target=_blank>'.$rec['title'].'</a><br>'; } elseif($rec['category'] == 2){ echo '<a href="'.$rec['url'].'" target=_blank>'.$rec['title'].'</a><br>'; } elseif($rec['category'] == 3){ echo '<a href="'.$rec['url'].'" target=_blank>'.$rec['title'].'</a><br>'; } } 24時間以内の記事にはNEWを表示したいのですが、どのように組み込んだらいいのか分かりません。 下記がNEWを表示するためのコードです。 while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ $ts = strtotime($rec['date']); $tsi = (time()-$ts); if($tsi<86400){ echo new.'<br>'; } else{ echo '<br>'; } } このようにifの中で更に条件分岐したい場合、どのようなやり方があるのでしょうか?

    • ベストアンサー
    • PHP
  • 文字列をテキストに書き出したい

    素人で大変申し訳ございません。 VBAを使用して、「テスト」という文字を「E:\フォルダ\試作.txt」に保存する VBAコードを教えて頂けないでしょうか? 何卒宜しくお願いします。

  • shaded border のjavascriptをブログの記事のテーブルで使おうと思っています。

    ブログの記事に使うテーブルを丸角にドロップシャドウがついたものに しようと思っています。 初めは画像でテーブルを作ろうと考えたのですが、背景に不規則な模様があるため、綺麗に出来ませんでした。(ドロップシャドウの部分が画像だと透過できず白浮きしてしまうので) JavaScriptのshadedborderだと、ドロップシャドウ部分が半透明綺麗に出るという記事を見つけたので、これをブログに使用したいと考えていますが、設置してみたところ何故か一番上の記事だけにしか表示されません。 ブログとの相性が悪いのか、それともタグを入れる箇所が間違っているのかがわからず困っています。 ブログはblogn+を使っています。 どなたかわかる方いらっしゃいましたら、お願いいたします。 HTMLにタグを入れた箇所です。 ↓のサイトでタグをコピペして入れました。 http://tech.bayashi.jp/archives/entry/techweb/2007/001667.html 沢山入れる箇所がありますが、他の部分は合っていると思います。 ---------------------------------------------------------- <div id="header" class="sb"> <h2>{LOGTITLE}</h2> <div class="entry_date"> {LOGYMD}Y,m,d,{/LOGYMD}<span class="entry_author">/author :{LOGAUTHOR}</span> </div> <div class="entry_body">{LOGBODY}<br> {MOREMARK}▼続きを読む{/MOREMARK} {LOGMORE} </div> <div class="entry_state"> | {LOGCATEGORY} | <br> | {LOGHMS}h:i A{/LOGHMS} | {LOGCOMMENT} | {LOGTRACKBACK} | </div> </div> ----------------------------------------------------------

  • データベースからの抽出&表示方法

    php、mysqlともに初心者なんですが、どのような構文(?)にしたらいいのか解決できるのか分かりません。 ニュース記事のデータベースにnewsというテーブルがあります。 id category       url                  title  count  article 1   a   http://headlines.yahoo.co.jp/hl?***   ******  80   ******* 2   a   http://news.goo.ne.jp/article/***    ******  70   ******* 3   a   http://news.goo.ne.jp/article/***    ******  50   ******* 4   a   http://www.mainichi-msn.co.jp/***    ******  40   ******* 5   a   http://www.mainichi-msn.co.jp/***    ******  20   ******* 6   a   http://www.yomiuri.co.jp/**       ******  20   ******* 7   a   http://www.yomiuri.co.jp/**       ******  10   ******* 8   b   http://www.yomiuri.co.jp/**       ******  10   ******* このテーブルからcategoryがaに属するtitleをcount順に表示したいのですが、 表示する際に news.goo.ne.jp と mainichi-msn.co.jp と yomiuri.co.jp をurlに含む記事にはtitleの最後に「注目」という文字を追加し、 それ以外の記事はそのまま表示したいと思っています。 下記のようにやってみたのですが、これでは全てのtitleに「注目」という文字が表示されてしまいます。 <?php $rs = mysql_query("select * from news where category = 'a' order by count desc",$con); while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ echo "<a href=" ; echo $rec['url'] ; echo ">" ; echo $rec['title'] ; echo "</a>" ; echo "注目" ; echo "<br>" ; } mysql_free_result($rs); mysql_close($con); ?> どのような構文にしたらgoo・msn・yomiuriの記事だけに注目という文字を付け加えることができるのでしょうか。 どなたかアドバイスして頂けませんでしょうか。よろしくお願い致します。

    • ベストアンサー
    • PHP
  • Movable Typeの変数タグの使い方

     お世話になっております。Movable Type4.1から本格的に導入された変数タグの使い方についてわからないことがあり調べてもなかなか出てこないので分かる方がいらしたらおしえてください。 以下のようなテンプレートタグを作っているのですが、このテンプレートでは、サブカテゴリーに属する記事を順に表示してゆくというものです。 カテゴリーごとの階層表示などはできますが、再下層のカテゴリーからそのエントリー記事を表示するとなるとちょっと複雑になるようです。 最初に<MTSubCategories>からサブカテゴリーの名前を取得して配列に格納しています。 次にサブカテゴリーの名前をループで表示させながらそのサブカテゴリーに属する記事を同時に表示しているのですが、どうやら、<MTEntries category="<$MTVar name="__value__"$>"…というくだりがうまくいってないようです。ここでは表示するエントリーをカテゴリーで指定しているのですが、<$MTVar name="__value__"$>という配列の値が展開されていないようです。モディファイアの中ので変数展開のやり方が調べてもなかなか出てきませんでした。 <MTSubCategories> <MTSetVarBlock name="push(subcategories)"><$MTCategoryLabel$></MTSetVarBlock> </MTSubCategories> <MTLoop name="subcategories"> <h2><$MTVar name="__value__"$></h2> <MTEntries category="<$MTVar name="__value__"$>" sort_order="ascend"> //←ここがうまくいっていないです。 <a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a>::<$MTEntryExcerpt convert_breaks="1"$> <a href="<$MTEntryPermalink$>">>></a><br /> </MTEntries> </MTLoop>  変数展開の部分がうまくいけばなんとかなると思うのですが、わかる方がいらしたらおしえてください。  よろしくお願いします。

  • TEXTデータの行の文字列を代入したい!

    例えば 1行目 2行目 3行目 と、なっているTEXTデータがあります。 変数XにTEXTデータの1行目を代入するにはどうしたらいいの? 続いて2行目を代入するには? 例文も交えてもらえると嬉しいです。

  • ,区切りでテキストで書かれたテキスト文書に文字列を書き加える(データバインド)

    データバインドで使用するテキストデータの内容が以下のように書かれています。 1,aaa.ne.jp/~xxx/ 2,bbb.co.jp/ 3,ccc.com/    ・    ・    ・    ・ このような場合、全てのcolumn2の前に同じ文字列(http://)を追加して表示するようなことはJavaScriptでできますでしょうか? 表示箇所は現在 <TABLE DATASRC="#Data"> <TBODY> <TR> <TD> <SPAN DATAFLD="column1"></SPAN> </TD> <TD> <A DATAFLD="column2" target="_blank"><SPAN DATAFLD="column2"></SPAN></A> </TD> </TR> </TBODY> </TABLE> といった感じです。 読み込むデータ側には「http://」が書かれていないため当然リンクしてくれません。 テキスト内のデータがかなり多いため、できれば読み込むデータ側のcolumn2にhttp://を付けるという処理は避けたいのです。 どなたかおわかりになる方、ご教授願います。

専門家に質問してみよう