用文本作数据处理

作者:redfox  邮件:ask4more@163.net   
主页:http://netnote.oso.com.cn

相信大家在网上申请的免费PHP空间,如果是初级用户,一般都是没得MySQL可供使用,那么我们解决数据处理的方法之一就是用文本文件了。但是用什么方法才可以最快最方便的处理文本数据呢?
    按我的经验,本人认为,以下列文件结构为最优:
----------------------------------------------------------------------
文件扩展名:.php
<? die('ACCESS DENIED!');?>
email=ask4more@13.net & nickname=redfox & realname=阿鼎 & url=http://NetNote.oso.com.cn & ...
...
----------------------------------------------------------------------
    也许大家都看出来了,以.php做扩展名,并且文件的第一行是<? die('ACCESS DENIED!');?>,这样就有效的阻止了对数据文件的非法访问。文件的第二行的格式都是:  变量名1=值1 & 变量名2=值2 & ...
    提出所有的变量很简单,就是用函数 parse_str();
例如:
<?
$theline="email=ask4more@13.net&nickname=redfox&realname=阿鼎&url=http://NetNote.oso.com.cn";
parse_str($theline);//分离出变量$email,$nickname,$realname,$url
echo "I am $nickname,my real name is $realname<br>";
echo "welcome to visit my website:$url<br>";
echo "email me at:$email";
?>
运行结果:
I am redfox,my real name is 阿鼎
welcome to visit my website:http://NetNote.oso.com.cn
email me at:ask4more@13.net

因此,本文约定,数据文本结构为:
----------------------------------------
<? die('ACCESS DENIED!');?>
变量名1=值1 & 变量名2=值2 & ...

文件扩展名: .php
----------------------------------------

真正的数据从第二行开始。好了,用这样的文件结构就可以很容易的实现GuestBook,BBS,甚至是社区的数据处理了:)我的主页“网络便签” http://netnote.oso.com.cn ,就是这样实现的。
    为了方便广大网友,我编了几个函数,下面将作出必要的解释。当然你可以随便的修改和挎贝,但你必须保证功能的完整性。请将下面的代码存为 textfun.inc (当然取其它的名字也是一样的),在你要使用的文件的开始部分加入一行语句<?include("textfun.inc");?>,你就可以使用我为你编的函数了。
下面一共一个db对象,一个函数p2row();

-------------textfun.inc----------------
<?
class db{
  var $dbfile;
  function createdb($dbName){
    $f=$dbName;
    $this->$dbfile=$f;
    $headInfo="<?die('ACCESS DENIED!');?>\n";
    $fp=fopen($f,"w");
    fputs($fp,$headInfo);
    fclose($fp);
    chmod($f,0777);//修改文件的模式,在Unix下也可用
    return(1);
  }
  function opendb($f){
    $this->$dbfile=$f;
    if(file_exists($f)){
      return true;
    }else{
      $this->createdb($f);
    }
  }
  function insertline($info){
    $fields=explode("|",$info);
    while(list($key,$val)=each($fields)){
      $therow.="$val=\$".$val."&";
      $var1.="\$".$val.",";
    }
    $var1.='$tail';
    eval("global $var1;"); //为了取得环境变量
    eval("\$therow=\"$therow\";");
    $fp=fopen($this->$dbfile,"a");
    fputs($fp,"$therow\n");
    fclose($fp);
  }
  function readall($f){
    if(file_exists($f)){
      $this->$dbfile=$f;
      $rows=file($f);
      for($i=1;$i<count($rows);$i++){
        $temp[]=$rows[$i];
      }
      return $temp;
    }
  }
  //以倒序的方式读入所有的数据行
  function revread($f){
    if(file_exists($f)){
      $this->$dbfile=$f;
      $rows=file($f);
      $d=count($rows);
      $j=$d-1;
      for($i=0;$i<$d;$i++){
        if($i<$j){
          $temprow=$rows[$i];
          $rows[$i]=$rows[$j];
          $rows[$j]=$temprow;
          $j--;
        }
      }
      for($i=0;$i<count($rows)-1;$i++){  //去掉首行
        $temp[]=$rows[$i];
      }
      return $temp;
    }
  }

function close(){
  $this=$nothing;
  }
}

//把段落文本格式化为一行文本,便于存储
function p2row($t){   
  $t=nl2br(stripslashes(htmlspecialchars($t)));
  for($i=0;$i<strlen($t);$i++){
    $c=substr($t,$i,1);
    if(ord($c)==10) $c=" ";
      $tempstr.=$c;
    }
    return $tempstr;
  }
?>
----------------------------------

db是我们自定义的本文数据对象,包括六个方法:createdb(),opendb(),insertline(),readall().revread(),close();

db->createdb(string filename)
用法例:<?
    include("textfun.inc");
    $mydb=new db;
           $mydb->createdb("UserInfo.php");     
    ?>
这个方法创建了一个文件UserInfo.php,首行是<? die('ACCESS DENIED!');?>

db->opendb(string filename)
用法例:<?
    include("textfun.inc");
    $mydb=new db;
           $mydb->opendb("UserInfo.php");
    ?>
这个方法以追加模式“打开”了数据文件UserInfo.php,如果这个文件不存在,则被创建。
    因此,这个方法可以取代createdb()方法。(但千万别删了class db{  }里面的createdb()函数哦:P)

db->insertline(string VarString)
用法例:<?
    include("textfun.inc");
    $theline="email=ask4more@13.net&nickname=redfox&realname=阿鼎&url=http://NetNote.oso.com.cn";
    parse_str($theline);//构造环境变量
    $mydb=new db;
           $mydb->opendb("UserInfo.php");
    $mydb->insertline("nickname|realname|email|url");
    ?>
db->insertline()可以将形如"nickname|realname|email|url"的字符串,分离出相应的环境变量,并以本文约定的形式存入文件。 传入insertline()的参数,一定要用“|”把环境变量名连成字符串,个数不限,但千万别在前面加"$"哦,嗯,就是要形如"nickname|realname|email|url"这样的字符串  :~)

array db->readall(string filename)
用法例:<?
    include("textfun.inc");
    $mydb=new db;
    $allrec=$mydb->readall("UserInfo.php");
    ?>
readall()方法返回除首行(<? die('ACCESS DENIED!');?>)外所有数据的数组,每行对应于数组的一个元素。

array db->revread(string filename)
用法例:<?
    include("textfun.inc");
    $mydb=new db;
    $allrec=$mydb->revread("UserInfo.php");
    ?>
revread()方法以倒序方式读入除首行(<? die('ACCESS DENIED!');?>)外所有数据,返回数组。这对我们在编留言本等时候尤为有用。

void db->close()
        关闭db对象。

好了,我们现在就用db对象编一个最简单的留言本。
---------guestbook.php------------
我的留言本<p>
<form name=form1 action=<? echo $PHP_SELF;?>>
NickName:<input type=text name=nickname><br>
E-Mail:<input type=text name=email><br>
Homepage:<input type=text name=url value="http://"><br>
Message:<textarea name=message cols=30 rows=12></textarea><p>
<input type=submit name=Submit value=提交>
</form>
<?
include("textfun.inc");
if($Submit){
  $thetime=date("Y-m-d h:m:s A");
  $message=p2row($message);
  $mydb=new db;
  $mydb->opendb("msg.php");
  $mydb->insertline("nickname|email|url|message|thetime");

//以下读出所有的数据
  $allrecs=$mydb->revread("msg.php");
  while(list($key,$theline)=each($allrecs)){
    parse_str($theline);
    ?>
    <a href="mailto:<?echo $email;?>"><?echo $nickname;?></a><?echo $thetime;?><br>
    URL:<a href="<?echo $url;?>"><?echo $url;?></a><br>
    Message:<br><?echo stripslashes($message);?><hr noshade size=1>
    <?
  }
  $mydb->close();
}
?>
-----------------------------
好了,虽然这个留言本不是很美观,但主要是为了举例说明db对象的用法~:)
本文在WIN98+PWS+PHP4下调试通过!

(0)

相关推荐

  • 用文本作数据处理

    作者:redfox  邮件:ask4more@163.net   主页:http://netnote.oso.com.cn 相信大家在网上申请的免费PHP空间,如果是初级用户,一般都是没得MySQL可供使用,那么我们解决数据处理的方法之一就是用文本文件了.但是用什么方法才可以最快最方便的处理文本数据呢?     按我的经验,本人认为,以下列文件结构为最优: ----------------------------------------------------------------------

  • pandas中对文本类型数据的处理小结

    目录 1.英文字母大小写转换及填充 2.字符串合并与拆分 2.1 多列字符串合并 2.2 一列 列表形式的文本合并为一列 2.3 一列字符串与自身合并成为一列 2.4 一列字符串拆分为多列 2.4.1 partition函数 2.4.2 split函数 2.4.3 rsplit函数 3.字符串统计 3.1 统计某列字符串中包含某个字符串的个数 3.2 统计字符串长度 4.字符串内容查找(包含正则) 4.1 extract 4.2 extractall 4.3 find 4.4 rfind 4.5

  • 如何给ss bash 写一个 WEB 端查看流量的页面

    由于刚毕业的穷大学生,和朋友合租了一台服务器开了多个端口提供 ss 服务,懒得配置 ss-panel,就使用了 ss-bash 来监控不同端口的流量,但每次都要等上服务器才能看到流量使用情况,很麻烦,于是就写了个简单的页面来提供 WEB 访问. JavaScript 版本 用 crontab 定时把流量记录文件复制到 WEB 目录下,写个 JS 脚本作数据处理. function successFunction(data) { var allRows = data.split(/\r?\n|\r

  • 基于python批量处理dat文件及科学计算方法详解

    摘要:主要介绍一些python的文件读取功能,文件内容修改,文件名后缀更改等操作. 批处理文件功能 import os path1 = 'C:\\Users\\awake_ljw\\Documents\\python for data analysis\\test1' path2 = 'C:\\Users\\awake_ljw\\Documents\\python for data analysis\\test2' filelist = os.listdir(path1) for files i

  • Linux中awk的使用方法详解

    在学习awk之前我们应该都学过sed,grep,tr,cut等等命令,这些命令都是为了方便我们对Linux下文本和数据的处理,但是我们会发现很多时候这些命令并不能一下子就完全解决我们的需求,很多时候我们都需要使用管道符结合这些命令来使用,今天我就给大家介绍一个命令awk,他就能很好的解决我们对文本和数据处理的需求,使我们一条命令就解决很多问题. 一.awk命令简介 awk被称为文本处理三剑客之一,其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian K

  • Python的这些库,你知道多少?

    一.导读 通常,开发大量原始代码是一个费时费力的工作而且有时候有很多专业知识我们不可能都一 一弄懂,为了避免这种情况,我们会尽可能多地使用库中已有的类来创建对象,通常仅需要一行代码.因此,库能够帮助我们使用适量的代码执行重要的任务.我想这也是为什么python能够活跃在我们身边的原因之一吧,欢迎大家点赞收藏,日后学习. 二.前戏 刚才忘了说了,大家在用python的时候我还是推荐大家下一个集成开发环境Anaconda这里面能够更好的管理这些第三方库文件,其好处只有你真正用过才知道老规矩想用的话自

  • 一个php作的文本留言本的例子(五)

    现在我们来讲一下reply.php的代码: --------------------------------- //reply.php <? function check_strlen_long($txt) { $len=strlen($txt); $count=0; for ($i=0;$i<$len;$i++) { if (ord($txt[$i])<128)   { $count=$count+1;}   if (ord($txt[$i])==10 or ord($txt[$i])

  • python文本数据处理学习笔记详解

    最近越发感觉到限制我对Python运用.以及读懂别人代码的地方,大多是在于对数据的处理能力. 其实编程本质上就是数据处理,怎么把文本数据.图像数据,通过python读入.切分等,变成一个N维矩阵,然后再带入别人的模型,bingo~跑出来一个结果.结果当然也是一个矩阵或向量的形式. 所以说,之所以对很多模型.代码束手无策,其实还是没有掌握好数据处理的"屠龙宝刀",无法对海量数据进行"庖丁解牛"般的处理.因此,我想以一个别人代码中的一段为例,仔细琢磨文本数据处理的精妙之

  • torchtext入门教程必看,带你轻松玩转文本数据处理

    用深度学习做nlp也有一段时间了,熟悉这块内容的同学都知道,实践算法的时候,写模型是个简单的事,最麻烦的是数据处理,数据处理不仅会浪费我们大部分时间,而且会消耗很大的计算资源,浪费人力物力. 今年开始接触pytorch,简洁的API,动态图,更加灵活的编写模式,诸多优点不用多说. 最近尝试使用torchtext工具,这里想先说明的是,torchtext并不是pytorch所独有的,使用其它深度学习框架,torchtext仍然可以使用. 但是比较麻烦的是,并没有很好很全面的torchtext教程,

  • 让你一文弄懂Pandas文本数据处理

    目录 前言 1. 文本数据类型 1.1. 类型简介 1.2. 类型差异 2. 字符串方法 2.1. 文本格式 2.2. 文本对齐 2.3. 计数与编码 2.4. 格式判断 3. 文本高级操作 3.1. 文本拆分 3.2. 文本替换 3.3. 文本拼接 3.4. 文本匹配 3.5. 文本提取 总结 前言 日常工作中我们经常接触到一些文本类信息,需要从文本中解析出数据信息,然后再进行数据分析操作. 而对文本类信息进行解析是一件比较头秃的事情,好巧,Pandas刚好对这类文本数据有比较好的处理方法,那

随机推荐