如何解决如何取出每行的前5个字符?
| 我有一个文本文件,在文件中22222 hihihi
33333 hihihi
kjhkh hihihi
我想编写一个与MysqL数据库进行比较的应用程序,以便如果我的数据库中的ѭ1与文本文件中的第一列相同,它将通过用文本第二列中的信息替换名称来更新数据文件。
我怎样才能做到这一点?
解决方法
如前所述,这些字段之间用制表符分隔,您可以将文件直接导入MySQL(假设id是该表的主键):
LOAD DATA INFILE \'data.txt\' REPLACE INTO TABLE mytable (id,name);
(注意:这不仅会更新,还会添加条目)
, 您可以尝试将数据加载到临时表中,运行更新,然后删除临时表-类似:
CREATE TABLE dftmp(id VARCHAR(255),name VARCHAR(255));
LOAD DXTX INFILE \'datafile.txt\' INTO TABLE dftmp(id,name);
UPDATE real_table,dftmp SET real_table.name=dftmp.name WHERE real_table.id=dftmp.id;
DROP TXBLE dftmp;
(将DXTX替换为DATA,将TXBLE替换为TABLE-之所以这样,是因为我的工作有适当的过滤系统)
有关LOAD DATA的更多信息,请参见http://dev.mysql.com/doc/refman/4.1/en/load-data.html。
主要在PHP中处理此问题可能会比较慢,但是如果您需要采用这种方法,则可能会像这样:
# make database connection
# open file and get it\'s contents
$lines = file(\'datafile.txt\');
# for each line in the file
# split the line into its parts
# update the DB
foreach ($lines as $line) {
$line_ar = explode(\"/\\s+/\",$line);
mysql_query(\"UPDATE t SET name=\'$line_ar[1]\' WHERE id=\'$line_ar[0]\'\");
}
# close the database connection
上面代码的潜在陷阱:
很大的文件:您需要一次读取和处理一行文件
凌乱的数据:您可能需要优化或替换explode语句
不安全的数据:参数化查询并添加检查以避免SQL注入攻击
慢:您正在进行许多数据库调用;考虑先描述的方法
脆弱:您可以添加检查以查看更新是否成功
有关更多信息,请参见http://php.net/manual/function.explode.php和那里的mysql-query文档
, 如果您确定它始终是5个字符,则可以简单地使用:
<?php
$ID = substr($varToEachLine,5);
?>
, 您可以使用explode()
将字符串分成几行;然后,对于每行,使用带有preg_match()
函数的简单正则表达式来匹配您感兴趣的部分。
例如,如下所示:
$str = <<<STR
22222 hihihi
33333 hihihi
kjhkh hihihi
STR;
foreach (explode(PHP_EOL,$str) as $line) {
if (preg_match(\'/^([^\\s]+)\\s+(.*)$/\',$line,$m)) {
var_dump($m[1],$m[2]);
}
}
会让你:
string \'22222\' (length=5)
string \'hihihi\' (length=6)
string \'33333\' (length=5)
string \'hihihi\' (length=6)
string \'kjhkh\' (length=5)
string \'hihihi\' (length=6)
关于我使用的正则表达式的注意事项:
从字符串的开头开始:^
匹配任何非白色字符(制表符,换行符,空格)::11ѭ
一次或多次:[^\\s]+
捕获它:([^\\s]+)
匹配任何白色字符:\\s
一次或多次:\\s+
匹配任意次数:.*
捕获它:(.*)
最后,字符串结尾:$
现在,当您使用文件而不是字符串作为输入时,您可能希望逐行读取文件,而不是将整个文件提取到内存中;为此,请参见“ 19”功能-在其手册页上有一个示例。
, 这似乎是一个分隔的文本文件。您可以使用文本驱动程序非常轻松地将数据加载到记录集中。我不喜欢PHP,但我相信有适用于PHP的文本驱动程序。如果您的应用程序在Windows上运行,则Microsoft Jet支持文本驱动程序,可用于将数据获取到记录集中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。