• ベストアンサー

上手い編集方法を知りたい

お世話になります。 具体的な話ですが、 文字列を編集するときに以下のようにしています。 もっと上手い方法があれば教えて欲しいのですが。 文字列 20100122125720 (2010年1月22日12時57分20秒)を 10年1月22日/12時57分 → 10.01.22/1257 と表示したいために、 $wk = substr($dt,2,2).".".substr($dt,4,2).".".substr($dt,6,2)."/".substr($dt,8,4); とやっています。 宜しくお願いします。

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

  • ベストアンサー
  • kuroizell
  • ベストアンサー率55% (95/170)
回答No.2

今回の場合、$dt = "20100122125720"ですよね? my $dt = "20100122125720"; $dt =~ s|(\d\d)(\d\d)(\d\d)(\d\d)(\d{4})(\d\d)|$2.$3.$4/$5|; print $dt; こんな感じでしょうか。

nagahaha
質問者

お礼

早速有り難うございます。 教えていただいた内容は見たことがありました。 今回十分理解しました。 こちらの方が見たままで分かりやすいと思いますので、 今後はこれを使わせていただきます。 お世話になりました。

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

その他の回答 (1)

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

肝心の、$dtに何を入れているかとか、substrの肝心な部分の内容を示さず聞かれても答えられない。 でも(たぶん)配列に入れるより、一種類のデータならパターンマッチm・置換演算子sのほうが早いのでは?

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

関連するQ&A

  • 続:日本語(マルチバイト)でのwordwrap処理

    日本語の文字列を、任意の字数で折り返す処理を行おうとしています。先にBLUEPIXYさんから以下のコードを頂きました。 ■■ #$line は、一行分のデータが文字列で入っている $n=10; # 改行させる(半角での)文字数 for($i=0;$i<mb_strlen($line);$i+=$len){ for($j=1;$j<=$n;$j++){ $wk=mb_substr($line,$i,$j); if(strlen($wk)>=$n) break; } $len=mb_strlen($wk); print ">$wk\n"; } ■■ このコードは美しく動くのですが、一つだけ問題があります。文中に改行が入っている場合に、改行後の文字列先頭に">"を付加する処理がないので、改行のある文章は、以下のように表示されてしまいます。 処理前の文字列: 1234567 890 処理後の文字列: >1234567 890 この"890"の手前にも">"を挿入するように、頂いたコードを変更してみました。こんな感じでやれば改行("\n")が拾えると思ったのですが。。。 ■■ for($i=0;$i<mb_strlen($message);$i+=$len){ for($j=1;$j<=$crlf;$j++){ $wk=mb_substr($message,$i,$j); //追加部分↓ $crlfChk=mb_substr($message,$i+$j,1); if($crlfChk=="\n") break; //追加部分↑ if(strlen($cnt)>=$crlf) break; } $len=mb_strlen($wk); print ">$wk\n"; } ■■ 追加部分の拾い方が間違っているのかな、と思うのですが、正解が分かりません。それとも、どこか別の部分が根本的に間違っているのでしょうか。(ローカルの環境はSJISなので、mb関数が正しく動作していないとか。。。?) どなたかご教授頂ければ幸いです。よろしくお願いします。

    • ベストアンサー
    • PHP
  • マルチバイト文字列の部分取得方法は?

    EUCコードでスクリプトを書いています。 substr() で部分文字列を取得すると、2バイト文字がきれいに丸まりません。 $s = "12月23日はABCの誕生日"; print substr($s, 0, 14); "12月23日はABC" または "12月23日はABCの" を取得したい時は、どうすればよいのでしょうか?

    • ベストアンサー
    • Perl
  • PL/SQLにて勤務時間の計算

    PL/SQLを用いて、勤務時間の計算を行うプログラムを作成中です。(DBがoracle11g) 単純に退勤時刻から出勤時刻を引いて求めたいのですが、 実行時にエラーとなってしまいうまくいきません。 (当方勉強始めたばかりで、エラーが出ても何がだめなのか分かっていない状況です。) 以下に実際コーディング中のソースを載せますので、どなたか教えていただけませんでしょうか? よろしくお願い致します。 ↓以下ソースです。(end_date、start_dateがパラメータでそれぞれchar(04)で定義しています。) --------------------------------------------------- --*変数定義 wk_time char(04) := '0000'; wk_time_h char(02) := '00'; wk_time_m char(02) := '00'; sys_date char(08) := '00000000'; BEGIN wk_time := to_date(end_date,'hh24mi') - to_date(start_date,'hh24mi'); wk_time_h := substr(wk_time,1,2); wk_time_m := substr(wk_time,3,2); if substr(wk_time,3,2) >= '30' then wk_time_m := '30'; else wk_time_m := '00'; end if; ---------------------------------------------------------- 実行すると、 ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます。が発生しました と表示されました。

  • csvファイル中に記載されたタイムスタンプ形式の変更

    csv形式ファイル中の文字列の変換で困っています。 時刻表示がどうやら以下のような意味で記入されているのですが、 000220152722 → 2000年2月20日15時27分22秒(日本時間) 020309215617 → 2002年3月9日21時56分17秒(日本時間) これをUNIXタイムスタンプ形式(1970年1月1日 00:00:00 GMTからの通算秒)に変換したいのですが、よいソフト又よい解決案があったら教えてください。何卒。

  • きょうだけのデータのみ取得したい

    アクセス解析のようなCGIを作っています。 logfile.dat→ACCESSFILE 2006年08月30日(水)06時59分51秒 6×.36.32.141 http://×××/menu.htm 2006年08月30日(水)04時59分51秒 6×.36.32.185 http://×××/menu.htm 2006年08月29日(火)08時00分51秒 62.36.30.143 http://×××/menu.htm 2006年08月28日(木)09時00分51秒 64.36.32.145 http://×××menu.htm ↓プログラム @accesslog = <ACCESSFILE>; #***** 各時間の件数を求める ***** foreach $rec ( @accesslog ) { $jikan = substr( $rec, 18, 2 ); $param{ $jikan }++; } ************************************************** 上記では全件表示されてしまいます。 今日が30日だとしたら30日分だけデータを取得する にはどうすればよろしいでしょうか?

    • ベストアンサー
    • Perl
  • 編集距離空間探索法

    文字列の類似度の指標として、編集距離というものがあります。文字列がリストで並んでいて、そこにある文字列との編集距離が最小になる問題を考えるような場合、シーケンシャルに文字列の編集距離を調べ、編集距離が最小になるアルゴリズムは効率が悪い。そこで、編集距離をノードの値としてもつ二分木というものを考えてみました。そこで質問なのですが、編集距離をノードの値として持つ二分木を用いて、編集距離が最小になるようなアルゴリズムは既に考案されているのでしょうか?

  • 編集すると固まってしまいます。

    編集すると固まってしまいます。 シャープのレコーダー(DV-AC82)を使用しています。 部分部分編集とかで切り取ったりなどしています。しかし、たまになんですが、編集を消去したりしていると突然画面が止まっちゃいます。(1分たったりします・・・。普通は○秒程度なんですよね?) そういったときはリセットで直してから改めて編集したりするのですが・・・ そこで質問です。 編集しているとき画面が止まってしまう原因とかご存知の方いらっしゃいましたらよろしくお願いします。 ちなみに買ったのは昨年10月です。

  • Illustratorで文字編集がおかしい

    IntelMac OSX10.8.5でIllustratorCCを使用しています。 テキストを編集する際、選択文字列に対し、 消したり/入力したり/コピペをしたり したいのですが、 ときどき挙動がおかしくなります。 (効果をかけているテキストに多い症状ですが、そうでないときもあります。ファイル自体が重いとか) 具体的な症状としては、  ◎消すときにカーソル位置はそのままで文字だけが消えていき、思う箇所の編集ができない。  ◎入力した順番と逆の順に入力されたり、前に入力した文字が打ち込まれたり、、、  ◎「文字をペーストできません」(画面参照:Ex1.jpg)  ◎Comannd+Zも利かなくなる などの症状がでます。 メモリ不足とかでしょうか? 症状が起こるファイルは比較的配置画像が多かったり、 効果やアピアランスの機能を多く使っているファイルが多いと思います。 Macは1年半ほど前に店頭で売っていたiMacで プロセッサ 2.7 GHz Intel Core i5 メモリ 8 GB 1333 MHz DDR3(確かメモリ増設したはず) グラフィックス AMD Radeon HD 6770M 512 MBです。 この症状が出ると、テキストエディターを介してペーストしたり、 新規ファイルを作って文字打ちしてからペーストしたりと、 (それもできたり、できなかったりで) コンピュータのご機嫌をとりながら、だましだまし作業をする感じで、 通常なら10秒ほどで終わる文字編集に5分~30分ぐらいかかったりしています。 (しつこく編集するとイラレが落ちるときもあるので) こういった症状が出ると、こうすれば良くなるとか、 バグなら、こういうファイルを作らなければ回避できるとか、 情報があるとうれしいのですが、どなたか詳しい方教えていただけないでしょうか。 よろしくお願いします。 ちなみに、CS6のときも同じ現象がおこっていたのですが、同じく自分では解決できませんでした。

  • XMLドキュメントを編集する方法は?

    下の画像のようなファイル、XMLドキュメントというのがあるんですが、その中身は日付と電話番号が500列ほど書いてあります。 これをエクセルで開くとA列に電話番号、B列に日付が書いてあります。 この日付を全て同じ日、例えば2012年2月12日13時13分15秒に統一したいんですが、 どういうソフトで編集すればいいんでしょうか? XMLをテキストで開くと””マークで区切られていて、一括で500個を編集するのに不便で、 エクセルで編集した後に、XML形式で保存しようとするとダイアログがでてエラーのような状態になり、 そのXMLドキュメントファイルをアプリケーションに戻すとエラーでアプリケーションが起動しなくなります。 私が行った事をかくと。 エクセルで開くときは、XMLリストとして開くか?とダイアログが出て、 指定したXMLソースはスキーマを参照していません。XMLソースデータに基づいてスキーマを作成します。とでるのでOKします。 数値を編集した後 MXLデータの形式で保存をしようとすると ファイルをXMLデータとして保存すると、書式、画像、およびオブジェクトなどのワークシートの機能が失われます。ワークシート全体を保持するにはキャンセルをクリックしマイクロソフト・オフィスエクセルブックとして保存してください。と表示されるので、継続を選択します。 この流れです。 よろしくお願いします。

  • EXCEL > 列が分かれている時、分、秒を1つに

    A列 : 12 B列 : 35 C列 : 50 というデータがある時、これから「12時35分50秒」というのをD列に取得したいです。 また、同じように、年、月、日が分かれているものを1つの列に取得したいと思います。 よろしくお願いいたします。