如何取出每行的前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支持文本驱动程序,可用于将数据获取到记录集中。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...