所以让整个问题变得困难的是我在 bash shell 环境中工作。我正在解析大量数据,这些数据都位于一组目录中的文本文件中。我工作的环境没有gui,只是shell,我通过mysql从shell执行命令,我没有登录mysql。
我是一个项目的合作伙伴,主要部分是一个 bash 脚本,用于搜索信息并将其插入到多个目录中的文本文件中。我的操作解析出所需的数据并将其插入数据库。
我通过一个 shell 脚本运行我的主循环。它遍历一组目录并在每个目录中搜索 .txt 文件。然后我将信息传递给我的程序。在类似下面的东西中。
注意:我不是 bash 专家,并且刚刚开始学习。
mysql - user -p'mypassword' --database=dbname <<EFO
call Procedure_Name("`cat ${textfile}`");
EOF
因为我只在 mysql 和 bash 中工作,所以我不能使用另一种语言来让我的生活更轻松,所以我主要使用 SUBSTRING_INDEX。因此,该过程的图示如下所示。
DELIMITER $$
CREATE PROCEDURE Procedure_name(textfile LONGTEXT)
BEGIN
DECLARE data LONGTEXT;
SET data = SUBSTRING_INDEX(SUBSTRING_INDEX(textfile,"(+++)",1),"(++)",-1));
INSERT INTO Table_Name (column) values (data);
END; $$
DELIMITER ;
文本文件是一个干净的结构,允许我将其剪切,但我遇到的问题是文本文件中的特殊字符导致我的程序抛出错误。我相信他们是转义字符,我需要解决这个问题。几乎任何字符都可能出现在我正在解析的数据中,因此我需要一种方法来忽略过程中的这些字符或使它们不影响我的过程。
我尝试查看 mysql_real_escape_string() 但是参数很难弄清楚,看起来它只适用于 PHP,但我不确定。所以我想在我的程序开始时做一些事情,可能会在字符串中插入“\”或其他东西,以免导致我的程序失败。
此外,这些文本文件的范围从 16k 到 11000k,所以我需要一些可以处理的东西。我的过程有时会起作用,但会遇到很多事情,而我的搜索根本没有帮助我。所以任何帮助将不胜感激!!!
感谢大家阅读这篇长篇描述。通常我可以找到我的答案或从问题中拼凑起来,但这次我没有运气,所以我想是时候注册一个帐户并提出一些问题了。