微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何取出每行的前5个字符?

如何解决如何取出每行的前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 举报,一经查实,本站将立刻删除。