解析固定格式的文件数据 php脚本

原创 2015年11月18日 21:19:28
#!/usr/bin/php
<?php
function printUseage() {
    die("usage: ./txt2json.php  [file_in] [file_out] [id:0,(ALL USER)] [search_type:1(ITEM),2(RES),3(ITEMOVERFLOW)] [res_id:0(ALL id)]\n");
}
function checkSearchCond($origin, $cond) {
    if ($cond == 0) {
        return true;
    }
    if ($origin == $cond) {
        return true;
    }
    return false;
}


if ($argc != 6) {
    printUseage();
}
$in_file = "";
$out_file = "";
$user_id = "";
$search_type = "";
$res_search_id = "";
if ($argv[1] == "") {
    printUseage();
} else {
    $in_file = $argv[1];
}
if ($argv[2] == "") {
    printUseage();
} else {
    $out_file = $argv[2];
}
if ($argv[3] != "") {
    $user_id = $argv[3];
} else {
    printUseage();
}
if ($argv[4] != "") {
    $search_type = $argv[4];
} else {
    printUseage();
}
if ($argv[5] != "") {
    $res_search_id = $argv[5];
} else {
    printUseage();
}
if ($search_type != 1 && $search_type != 2 && $search_type != 3) {
    echo "ERROR: search_type range must be in (1,2,3) !!!\n";
    printUseage();
}
if (!file_exists($in_file)) {
    echo "ERROR: file "."$in_file"." doesn't  exists!!!\n";
    printUseage();
}
$file = file_get_contents($in_file);
//$file = iconv('UCS-2LE', 'UTF-8', $file);
$out_log_file = fopen($out_file, "w") or die("unable to open file!");


$lines = explode("\n", $file);
$time_array = array();
$id_array = array();
$user_name_array = array();
$way_type_array = array();
$way_desc_array = array();
$res_template_array = array();
$change_value_array = array();
$res_value_array = array();
foreach ($lines as $s) {
    if ($line = explode("|", $s)) {
        if ($search_type == 1) {//ITEM
            if ($line[0] == "ITEM" && checkSearchCond($line[6], $res_search_id)) {
                if (checkSearchCond($line[2], $user_id)) {
                    $time_array[] = $line[1];
                    $id_array[] = $line[2];
                    $user_name_array[] = $line[3];
                    $way_type_array[] = $line[4];
                    $way_desc_array[] = $line[5];
                    $res_template_array[] = $line[6];
                    $change_value_array[] = $line[7];
                    $res_value_array[] = $line[8];
                }
            }
        } elseif ($search_type == 2) {//RES
            if ($line[0] == "RES" && checkSearchCond($line[6], $res_search_id)) {
                if (checkSearchCond($line[2], $user_id)) {
                    $time_array[] = $line[1];
                    $id_array[] = $line[2];
                    $user_name_array[] = $line[3];
                    $way_type_array[] = $line[4];
                    $way_desc_array[] = $line[5];
                    $res_template_array[] = $line[6];
                    $change_value_array[] = $line[7];
                    $res_value_array[] = $line[8];
                }
            }
        } elseif ($search_type == 3) {//ITEMOVERFLOW
            if ($line[0] == "ITEMOVERFLOW" && checkSearchCond($line[6], $res_search_id)) {
                if (checkSearchCond($line[2], $user_id)) {
                    $time_array[] = $line[1];
                    $id_array[] = $line[2];
                    $user_name_array[] = $line[3];
                    $way_type_array[] = $line[4];
                    $way_desc_array[] = $line[5];
                    $res_template_array[] = $line[6];
                    $res_value_array[] = $line[7];
                }
            }
        }
    }
}
date_default_timezone_set("Asia/Shanghai");
$total = count($time_array);
$header = "";
if ($search_type == 1) {
    $header = "TIME\tNAME\tWAY\tITEM_ID\tCHANGE\tNOWVALUE\n";
} elseif ($search_type == 2) {
    $header = "TIME\tNAME\tWAY\tRES_ID\tCHANGE\tNOWVALUE\n";
} elseif ($search_type == 3) {
    $header = "TIME\tNAME\tWAY\tITEM_ID\tLOSTVALUE\n";
}
fwrite($out_log_file, $header);
if ($search_type == 1 || $search_type == 2) {
    for ($i=0; $i<$total; ++$i)
    {
        $time_stamp = date('Y-m-d H:i:s', $time_array[$i]);
        $user_name = $user_name_array[$i];
        $way_desc = $way_type_array[$i];
        $res_id = $res_template_array[$i];
        $changed = $change_value_array[$i];
        $new_value = $res_value_array[$i];
        $out = "$time_stamp\t$user_name\t$way_desc\t$res_id\t$changed\t$new_value";
        fwrite($out_log_file, $out."\n");
    }
} elseif ($search_type == 3) {
    for ($i=0; $i<$total; ++$i)
    {
        $time_stamp = date('Y-m-d H:i:s', $time_array[$i]);
        $user_name = $user_name_array[$i];
        $way_desc = $way_type_array[$i];
        $res_id = $res_template_array[$i];
        $new_value = $res_value_array[$i];
        $out = "$time_stamp\t$user_name\t$way_desc\t$res_id\t$new_value";
        fwrite($out_log_file, $out."\n");
    }
}

fclose($out_log_file);


输入文件内容LIKE THIS:

ITEM|1447840806|20090000000016|1666|1103||5125|-10|5|
RES|1447840939|20090000000033|0041|5||110|1|17|
ITEMOVERFLOW|1447842442|20090000000016|1666|1202||16|1|

输出文件内容LIKE THIS:

2015-11-18 13:57:37 3333 2 5106 100 900
2015-11-18 13:57:37 3333 2 5106 99 999
2015-11-18 14:00:01 3333 1002 203 -10 961
2015-11-18 14:00:14 3333 1003 221 -5 994
2015-11-18 14:00:19 3333 1002 203 -89 872
2015-11-18 15:54:04 1111 1002 203 -1 228
2015-11-18 15:54:04 1111 1002 203 -1 227
2015-11-18 15:54:05 1111 1002 203 -1 226
2015-11-18 15:54:05 1111 1002 203 -71 155
2015-11-18 15:58:34 1111 1103 5128 -10 0

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

读取excel文件数据集,生成固定格式excel文件

对excel读写操作,关键依赖库:jxl.jar 写入的excel文件只能是.xls格式。xlsx格式,用wps打开另存为 Excel 97-2003文件(*.xls)读:读取excel记录,获取每...

Python脚本---把MySQL数据库表中的数据导出生成csv格式文件

Python脚本---把MySQL数据库表中的数据导出生成csv格式文件
  • guoyJoe
  • guoyJoe
  • 2015年05月19日 10:02
  • 5304

PHP JSON格式数据交互实例代码详解_php技巧_脚本之家

http://www.jb51.net/article/26007.htm 此前我写了不少在PHP网站开发中应用XML进行数据交互的实例,这两天通过PHP解析JSON并进行交互的实例学习和了解了JS...

mysql将查询部分数据导出到外部文件的脚本,文件格式替换

mysql将查询部分数据导出到外部文件的脚本: mysql -u root -p222222 -e "use ccbdj2014;SELECT A.CERT_NO 证件号码,A.CUST_NAM...

固定格式文件分析工具

  • 2013年10月08日 23:29
  • 5KB
  • 下载

创建固定大小的文件 -- Linux shell 脚本编写实例

创建固定大小的文件 -- Linux shell 脚本编写实例   昨天验证bug时,需要在原来文件的基础上生成一个固定大小的新文件,具体要求如下:   1. 源文件 src_fil...

固定格式的txt文件转DBF

  • 2010年10月01日 18:18
  • 1.08MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解析固定格式的文件数据 php脚本
举报原因:
原因补充:

(最多只允许输入30个字)