遍历日志文件并打印

<?php
error_reporting(E_ALL);
ini_set(‘display_errors‘, 1);

function load($file)
{
//No.1
//开始写代码,读取日志文件
$file = fopen($file,‘r‘);
$contents = array();
while(!feof($file))
{
$contents[] = fgets($file);
}
return $contents;
}

function eliminate($lines)
{
$new = array();
foreach($lines as $line)
{
list($dul,) = explode("\t", $line, 2);

if(isset($new[$dul]))
{
$line = str_replace($dul,"\t",$line);
}
$new[$dul][] = $line;
}
return $new;
}

function qSort($array)
{
$length = count($array);
if(count($array)<=1)
return $array;
//No.2
//开始写代码,对时间戳进行从小到大排序 快速排序
$left_array=$right_array=array();
//使用for循环进行遍历,把第一个元素当做比较的对象
for($i=1;$i<$length;$i++)
{
//判断当前元素的大小
if($array[$i]<$array[0]){
$left_array[]=$array[$i];
}else{
$right_array[]=$array[$i];
}
}
//递归调用
$middle=$array[0];

//end_code
return array_merge(qSort($left_array),array($middle),qSort($right_array));
}

$newFile = ‘‘;
$data = eliminate(load(‘aa.log‘));
//No.3
//开始写代码,调用函数,将日志中的数据排序,并将重新排好序的数据写入文件
$keys = array_keys($data);
//sort($keys); //其实不用快速排序 直接将键值sort即可
$keys = qSort($keys);
$newsFile = array();
foreach($keys as $value)
{
$newsFile[] = implode(‘\n‘, $data[$value]);
}
$newsFile = implode(‘ ‘, $newsFile);
//end_code
file_put_contents(‘bb.dat‘,$newsFile);
?>

面试题:考察 快速排序,文件的用法

当时时间的限制没做出来,后来花了一个小时终于弄出来。看来我还是很笨的。。。加油。。。找工作。。。

时间: 2024-11-05 14:48:49

遍历日志文件并打印的相关文章

发现日志文件和打印在eclipse控制台中的编码不一致

发现日志文件和打印在eclipse控制台中的编码不一致,正好相反. 日志文件是用notepad打开的,notepad有自己的编码方式,查询编码为utf-8,日志文件汉字等等显示正常. 但是在eclipse控制台打印的是乱码. 为什么? 原因:其实日志文件和控制台打印的本身是一致的,只是设置显示的编码方式不同. 控制台显示也有自己的编码方式,设置如下: http://www.cnblogs.com/nannan0226/p/8421757.html 原文地址:https://www.cnblogs

python 实时遍历日志文件

open 遍历一个大日志文件 使用 readlines() 还是 readline() ? 总体上 readlines() 不慢于python 一次次调用 readline(),因为前者的循环在C语言层面,而使用readline() 的循环是在Python语言层面. 但是 readlines() 会一次性把全部数据读到内存中,内存占用率会过高,readline() 每次只读一行,对于读取 大文件, 需要做出取舍. 如果不需要使用 seek() 定位偏移, for line in open('fi

控制台上打印日志文件

必须依赖log4j   jar包. Log4j的配置文件,在配置文件中指定日志的输出.并且当web容器启动时,就会自动的加载log4j.properties文件. log4j.properties文件(一般不需要自己写): 1 log4j.rootLogger=DEBUG,A1 2 log4j.logger.org.mybatis = info 3 log4j.appender.A1=org.apache.log4j.ConsoleAppender 4 log4j.appender.A1.lay

Shell执行将脚本里的变量打印到指定日志文件

首先需要定位获取任务的运行日志或者报错信息,才能定位问题. 通过shell调用有些脚本的话,日志信息会打印在shell里.不过也有用户在shell里调用正常,但是到crontab调用的时候就出错并且没日志了. 针对这种情况,可以在crontab里把任务执行的输出记录下来,后续出了问题可以到日志文件里获取任务的日志.可以参考:  abc -f xxx.sql >> /home/admin/logs/xxx.log 2>&1  待续...

Log4j配置的经典总结,打印日志文件,日志存库

    一.介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制 日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Syslog守护进程等:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程. Log4j 由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式.日志信息的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来

Android日志打印类LogUtils,能够定位到类名,方法名以及出现错误的行数并保存日志文件

关注finddreams,一起分享,一起进步!http://blog.csdn.net/finddreams/article/details/45569089 在开发中,我们常常用打印log的方式来调试我们的应用.在Java中我们常常使用方法System.out.println()来在控制台打印日志,以便我们的调试.Android中有一个专门的类Log来实现在Android系统下日志的打印,更加方便我们定位程序出现问题的地方. 但是Android官方提供的Log类在实际项目使用中,也不是非常方便

删除指定目录下过期文件并打印日志

肯定会遇到这样的事,有一个文件夹,每天都在生成文件,那么如何去删除那些过期的文件呢.废话不多说,直接上代码: import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.text.SimpleDateFormat; public class DeleteFileImpl { //这三个变量也可以在配置文件里面配置,但是需要用到@

实时监听hive日志文件,并将内容打印到控制台上

1:在flume/job下配置flume-file-logger.conf配置文件 2:在flume根目录下开启监听(注意,如果当天没有使用hive产生过日志文件的话先操作hive产生当天日志文件) 3:操作hive产生日志文件,查看控制台 原文地址:https://www.cnblogs.com/lihui001/p/12684383.html

windows编程按小时生成日志文件

这是一个简单的日志记录方法,为了避免单个日志文件过大,所以每个小时生成一个新的日志文件 注意:g_pLogPath 可以带路径,但是必须手动创建好路径,保证目录存在.而且要详细到log文件名,不能带后缀,后缀默认为.log 后缀名需要在createLogFileName()中修改,可以改为.txt log.h #pragma once #define WRITE_LOG_ENABLE //启用日志打印 #include <string> #include <Windows.h> #