设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
Perl | PHP | Python 脚本程序开发
›
有没有什么方法能从某文件中提取我感兴趣的部分文本? ...
返回列表
查看:
624
|
回复:
2
有没有什么方法能从某文件中提取我感兴趣的部分文本?
[复制链接]
jeoncanon
jeoncanon
当前离线
积分
230
IP卡
狗仔卡
发表于 2004-12-18 13:17:05
|
显示全部楼层
|
阅读模式
我最近用apache+php+mysql搭建了一个学习php和mysql的环境,正好领导要我写一个小小的安全违章信息管理系统。数据库模式已经设计好,做到现在领导才提醒我以前的安全违章信息是用文件记录的。而我设计的违章信息表(vio-info)包含如下字段:
vio_id bigint(20) //违章事件ID(主键)
user_id int(5) //违章者的ID
vio_name varchar(20) //违章者姓名
user_class varchar(20) //违章者职务
vio_depart varchar(50) //违章者部门
vio_date date //违章日期
vio_reason text //违章原因
vio_class char //违章性质(一般,严重)
vio_punish text //违章处理结果
自己看那些文件,才发现没有“固定”的格式,例如:2004年12月1日在XX部门发现YY(职务)XXX员工违章,原因是.............,属于XX(违章性质)违章,经上级确定给予以下处罚..........(违章处理结果)。领导的意思如果人工提取这些信息并手工录入,好象失去了信息技术带来的高效,快捷。所以我考虑到将那些文件扫描后OCR成txt文件,然后用脚本提取这些信息再按照mysql数据表的要求存为带域分隔符的文本文件,最后导入数据库中。不知道perl或者unix系统自带的awk sed能否实现这样的功能,向各位请教!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
nbxmedia
nbxmedia
当前离线
积分
3904
IP卡
狗仔卡
发表于 2004-12-20 16:17:16
|
显示全部楼层
正则表达式即可
如果文本其它内容是固定的话
看看?[PHP]preg_match('/(.*?)在(.*?)部门发现(.*?)(职务)(.*?)员工违章,原因是(.*?),属于(.*?)违章,经上级确定给予以下处罚:\\n(.*?)/', $text, $cap);
print_r($cap);[/PHP]
唯一要求就是其它地方的格式固定,要不然,再高科技也没辙
回复
支持
反对
使用道具
举报
显身卡
jeoncanon
jeoncanon
当前离线
积分
230
IP卡
狗仔卡
楼主
|
发表于 2004-12-27 23:23:37
|
显示全部楼层
在
www.chinaunix.net
上bitbull兄给我的回复如下
http://bbs.chinaunix.net/forum/viewtopic.php?t=468943
#!/bin/bash
sed 's/\([0-9]*\)年\([0-9]*\)月\([0-9]*\)日在\(.*\)部门发现\(.*\)(职务)\(.*\)(姓名).*原因是\(.*\),属于\(.*\)(违章性质).*以下处罚\(.*\)(违章处理结果).*/\1\2\3;\4;\5;\6;\7;\8;\9/' $1>temp
awk 'BEGIN { i=1 }
{
print i";"i";"$0
i++
}' temp
测试如下
代码:
[root@bbhome test]# cat file
2004年12月1日在ZZZ部门发现YYY(职务)XXX(姓名)员工违章,原因是AA,属于BB(违章性质)违章,经上级确定给予以下处罚CC(违章处理结果)。
2004年11月1日在销售部门发现经理(职务)武大狼(姓名)员工违章,原因是太急上厕所了,属于故意(违章性质)违章,经上级确定给予以下处罚开除(违章处理结果)。
2004年10月11日在开发部门发现技术主管(职务)武松(姓名)员工违章,原因是大嫂和别人睡觉,属于故意杀人(违章性质)违章,经上级确定给予以下处罚枪毙(违章处理结果)。
2004年12月1日在卫生部门发现小工(职务)西门庆(姓名)员工违章,原因是和别人老婆睡觉,属于故意(违章性质)违章,经上级确定给予以下处罚阉割(违章处理结果)。
[root@bbhome test]# temp2 file
1;1;2004121;ZZZ;YYY;XXX;AA;BB;CC
2;2;2004111;销售;经理;武大狼;太急上厕所了;故意;开除
3;3;20041011;开发;技术主管;武松;大嫂和别人睡觉;故意杀人;枪毙
4;4;2004121;卫生;小工;西门庆;和别人老婆睡觉;故意;阉割
复制代码
请问这段代码的功能用perl如何实现,多谢!
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表