したがって、この質問全体を難しくしているのは、私が bash シェル環境で作業していることです。ディレクトリ セット内のテキスト ファイルにある大量のデータを解析しています。私が作業している環境にはGUIがなく、単なるシェルであり、mysqlを介してシェルからコマンドを実行しています.mysqlにログインしていません。
私はプロジェクトのパートナーです。主な部分は、情報を検索して複数のディレクトリのテキスト ファイルに挿入する bash スクリプトです。私の操作では、必要なデータを解析してデータベースに挿入します。
シェル スクリプトを使用してメイン ループを実行します。一連のディレクトリをループし、それぞれの .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 の範囲にあるため、それを処理できるものが必要です。私のプロセスは時々機能しますが、多くのものに巻き込まれ、私の検索はまったく役に立ちません. だからどんな助けでも大歓迎です!!!
そして、この長い説明を読んでくれてありがとう。通常、私は自分の答えを見つけるか、質問からそれをつなぎ合わせることができますが、今回は運がなかったので、アカウントを作成して何か質問する時が来たと思いました.