• 締切済み

ログの解析プログラム

ducklingの回答

  • duckling
  • ベストアンサー率47% (88/185)
回答No.2

一般的に、スプリットさせる区切り文字には、 <> を使います。 callhiro さんが言われるように、 スプリットの区切りを変えた方が早いと思いますよ。

nights03
質問者

お礼

substr関数を使うとうまくいきました。 実際のプログラムは以下のようにしました。 @log_split = split(/ /,$logdata,2); $logdata[0] = substr($log_split[1],0,$log_split[0]); $logdata[1] = substr($his_002[1],$his_002[0]); print "メッセージ内容<BR>\n"; print "<FONT COLOR=\"$font_color\">$logdata[0]</FONT><BR>"; print "<BR>\n"; これで残りのデータは$logdata[1]に入るので活用できます。

関連するQ&A

  • Cのプログラムで、MeCabである文字列を解析し、得たいくつかの名詞ま

    Cのプログラムで、MeCabである文字列を解析し、得たいくつかの名詞または動詞を別の配列に格納するにはどのようなプログラムを書けばいいのでしょうか。

  • C# 文字列の分割

    VS2005を使用しているものです。 複数のURL(入力)を格納したString型の配列があるのですが、 この配列から各要素(URL)の最後尾にあるファイル名だけを 取り出して別のString型の配列に入れたいのですが Splitなどを駆使すればよいのでしょうか? 例 C:\○○○\▲▲▲\××.拡張子 (元の配列の要素の一例)   などから××.拡張子の文字列だけを取り出して   別の配列に格納する感じです。 splitを使う際は\などを区切りに考えています。 for文の中でsplitを駆使しようと考えたのですが、分割した文字列を別で配列に格納して、その最後尾の要素だけ取り出したいのですが、URLの長さは入力によってまちまちなのでどのようにして取り出せばよいか困っています。 勉強不足で恐れ入りますが、何かご教授願えれば幸いです。

  • Perl:大容量ログを正常に読み込む方法が知りたい

    ある動作のログを出力するシステムの機能改修の立場にある者です。 言語はperlです。 大容量ログを正常に読み込む方法が知りたいのですが、急いでおります。 ログが出力されているファイルが大容量で、 ログ読み込みの始めのうちは問題なく扱えていますが、 ログをどんどん読み込んでいくと 「Internal Server Error」となります。 スクリプトは下記の通りです。 open LOGFILE,○○ while($** = <LOGFILE>){ ログの文字列をいろいろ切り出して、配列に格納。 必要なログ情報を取り出せたらループから出る。 } close(LOGFILE); 上記の配列を扱い、ログを多様な表示スタイルで出力します。 ブラウザでのログ表示で検索条件で指定されたログを抽出できたら 途中でループから逃げているので問題なく動作しております。 しかし、ページを切り替え、ログをどんどん読み込んでいくと (おそらく)配列に格納するメモリが大容量のため エラーになってしまいます。 ※ログ表示で設置している検索条件機能 (1)何ページ目表示指定 (2)1ページあたりのログ表示行数指定 (100行表示で3ページ目を見る場合、201行目から300行が表示されます。) そのためページ切り替え毎にログを格納している配列を破棄?するなど メモリを解放することが必要になる?かと思っています。 しかし、ページ切り替えごとにログの一番初めから読み込み直す必要もあるのでは?とも考えています。 ※ログの一文目からカウンタで順番を数えていて、後でログを格納した配列でキーを指定してログを取り出しています。 検索条件を変えながらでも、かつメモリを解放?しながらログを配列に格納して扱う方法はあるでしょうか。 つまづいてしまって進めません。。 ※メモリを増やすといったパワープレーではなく、 プログラムの書き方でメモリの負荷を少なくして実現させたいです。 もしいい方法をご存知の方がいらっしゃれば、よろしくお願いいたします。 長文失礼いたしました。

  • splitを使ってスペース位置で文字列を区切りたい

    splitを使ってスペース位置で文字列を区切りたいのですが、 String[] word = str.split(" ",0);  //半角空白 のように書くと、全角スペースは区切りとしてみなされず、 String[] word = str.split(" ",0);  //全角空白 のように書くと、半角スペースは区切りとしてみなしてくれません。 全角スペースでも半角スペースでも、スペース位置で文字列を区切りたいのですが、どのように書けばよいのでしょうか?

    • ベストアンサー
    • Java
  • アクセスログの解析スクリプト

    アクセスログの解析スクリプト Googleからの訪問者の検索ワード集計を行いたいと思っております。 本当はperlで書きたかったのですが、 全く知識がないためphpにしました。 それに正規表現について全くわかっていませんが、 以下までは何とか辿り着く事が出来ました。 <?php $fp_in = fopen("./access_log", "r"); $fp_out = fopen("./out.log", "a"); $pattern = "http:\/\/www\.google\.co(.*)\/search\?(.*)$". "(/[-.!~*\d\w;/?:@&=+$,%#]+)?"; while (!feof($fp_in)) {   $data = fgets($fp_in, 65536);   if (ereg ( $pattern, $data, $url )) {     $ary = split('&', $url[2]);     foreach ($ary as $value) {       if (strstr ($value, 'q')) {         if (!fwrite($fp_out, $value)) {           print "Cannot write to file ($filename)";           exit;         }       }     }   } } fclose($fp_in); fclose($fp_out); ?> 「q」で始まる配列をout.logに出力しております。 ここから文字列を分割して行こうと思っているのですが、 検索ワードは半角・全角スペースが混在しているため、 どのようにしたら良いかつまずきました。 手詰まり状態&もっと効率的なロジックがあると思っています。 どうかアドバイスをお願いいたします。

    • 締切済み
    • PHP
  • PHPプログラムについて

    読み込んだテキストファイルを1行ずつ検索し、特定の文字が見付かればそれに続く文字列を配列に格納するというプログラムを作りたいです。 そこで指定文字列の出現以降の文字列を取り出すというstrchr関数を用いて 作成を試みたのですが上手くいきません。 何か別の方法があれば教授をお願いします。

    • 締切済み
    • PHP
  • Apacheログの解析

    rubyを使って aaabbb - - [20/Jun/2001:19:16:15 +0900] "GET / HTTP/1.0" 200 4636 bbbccc - - [20/Jun/2001:19:16:15 +0900] "GET /pbpenguin.png HTTP/1.0" 304 - http://sss.org/ aaaaaa - - [20/Jun/2001:19:16:15 +0900] "GET /pbdebian.png HTTP/1.0" 304 - http://aaa.org/ruby/ ssssss - - [20/Jun/2001:19:16:27 +0900] "GET /ruby/ HTTP/1.0" 200 4371 aaabbb - - [20/Jun/2001:19:16:30 +0900] "GET /ruby/rice.html HTTP/1.0" 200 2388 このようなapacheのログから、ホストごとのrefererを時系列順に表示するプログラムを作りたいのですが、 aaabbb -> 配列1 bbbccc -> 配列2 aaaaaa -> 配列3 ssssss -> 配列4 aaabbb -> 配列1 という風に同じホストごとに配列に格納するという処理をどう書けばいいのかが分かりません。 分かる方いましたら回答お願いします。

  • C# Splitと配列の複合方法

    こんにちは、 ”てすと、です。¥四月、寒い。” のような文字列があり これを¥で区切り、さらにカンマで区切って(Splitでここはできたのですが) 結果を下記のように配列に格納したいと思うのですが、どのように記述すればよいでしょうか? 配列(0,0)=”てすと” 配列(0,1)=”です。” 配列(1,0)=”四月” 配列(1,1)=”寒い。” 文字列の内容が定まっていないため配列の要素数が変動してするものでして。

  • 誰か教えてください(>ω<)

    •split.c:任意の文字列を,特定の文字列を境に分割し,文字列配列に格納するMySplit()という関数をもつ •join.c:任意の文字列配列を,特定の文字列を境に結合し,一つの文字列にするMyJoin()という関数をもつ •P.c:文字列AAA<>BBB<>CCC<>DDDをdefineし,これに対して,<>を境にsplitして文字列配列の各文字列を表示し,その後でその文字列配列を<>を境にjoinして表示する。 splitかjoinという関数だけでもかまわないのでわかる方がいたらぜひ教えてください。

  • 任意の区切り文字でsplitする方法

    VBAで任意の区切り文字でsplitする方法を教えてください。 例えば 123 456 789 333 3444 66 65 22 といようなスペースあるいはタブで区切られたテキストデータがあるとします。 これを配列に格納したいのですが、 この区切りがタブ一つとか、スペース一つとか決まっていれば split関数で簡単に配列に格納することができますが、 タブかも知れないし、スペースがかも知れないし その数も未定の場合にはどうしたら良いですか? replace関数を使って、まず全てのタブをスペースに変換し その後に、複数のスペースを一つのスペースに変換し 最後にsplit関数を使うという方法しかないでしょうか? もっとスマートな方法があれば教えてください。