2017-09-30 17 views
-3

私が持っているもの:私はこのロジックproble.mとこだわっている

-Iは、様々な製品を使用してファイルを持っている(「P」せずに、フラグが「P」は予約を意味するわけ販売が、予約されていない)

ELEMENTS

 PRODOTTO      Quantita Terminale  
    TAMOXIFENE EG*20CPR RIV 20MG  00002n  04 
    FERRITIN COMPLEX*OS 10FL 8ML  00001  P 01 
    VOLTADOL*10CER MEDIC 140MG  00001n  05 
    LEDERFOLIN*10CPR 7,5MG   00002  P 03 

-fromこのファイルは、通常のPHPの表現( "P" フラグとその検索は、文字列のみ)を介して、私は製品を抽出し、MySQLのDBに挿入します。自動的

insericineldb.php

$txt = file_get_contents('./FILE', true); 
$specialChars = preg_quote('#$%^&*()+=-[]\';,./{}|\":<>?~', '#'); 

preg_match_all('#([0-9]{4,9}\s+[A-Z]{1}\s+([' . $specialChars . 'A-Z0-9 ]+)\s+([0-9]{3,7})n?\s+P\s+([0-9]+))#', $txt, $match); 

    $products = []; 
    foreach (array_keys($match[2]) as $idx) { 
     $tagliaprodotto = rtrim(substr($match[2][$idx],1)); 
     $tagliaquantita = ltrim($match[3][$idx],'0'); 
     $products[] = [ 
      'prodotto' => $tagliaprodotto, 
      'quantita' => $tagliaquantita, 
      'terminale' => $match[4][$idx] 
     ]; 
    } 

    $query = $pdo->prepare('INSERT INTO tabella (prodotto, quantita, terminale, data) VALUES (:prodotto, :quantita, :terminale, NOW()) ON DUPLICATE KEY UPDATE quantita = VALUES(quantita), terminale = VALUES(terminale)'); 

    foreach ($products as $product) { 
     $query->execute($product); 
    } 

-I抽出物(ファイルの変化を監視する)バッチの使用のおかげ。

BATCH

@echo off 
:loop 
timeout -t 1 >nul 
for %%i in (c:\file) do echo %%~ai|find "a">nul || goto :loop 
"c:\xampp\php\php.exe" -f c:\xampp\htdocs\inseriscineldb.php 
rem do workload 
attrib -a c:\file 
goto :loop 

ファイル:

(彼らは最終的に順序を作るとき、1日2回)は完全ではない(一部空になっている規則的ではない一定の時間-At文字列と "P"がある場合とない場合がファイルに残りますが、重要ではありません。なぜなら、ifを次のように使用することはできないからです。つまり、P = 0のときはクエリを開始しないからです。

-Furthermoreは時々いくつかの製品(ES。フェリチンCOMPLEX * OS 10FL 8ML 00001 P 01)自発的にを排除している(顧客は、50ミリリットルの製品を望んでいる私はそれを予約したが、彼は8ミリリットルの製品を望んでいる後と仮定、古い50ミリリットルの順序は、データベースから削除されることはありません)

問題:

1)だから、要素の一つが自発的にを削除されたとき、私は、INSERT INTOを介してデータベースに製品を入力すると、データベースからは削除されません。

2)ただし、INSERTの代わりにREPLACEを使用すると、ファイルが空になったときにデータベース内の他の要素も削除されてしまいます。

+0

コメントは拡張されたディスカッションやデバッグセッションではなく、このチャットは[チャットに移動]されています(http://chat.stackoverflow.com/rooms/155707/discussion-on-question-by-squaloあなたが編集している間にあなたのタイトルを変更する必要がありますので、あなたはそれを編集する必要があります* –

答えて

0

これは非常に簡単な方法で、の要素をデータベースから読み込み( "select * from tabella")、ファイルに存在するものを確認して削除/挿入/更新します

+0

はい、どうですか?私は解決策を見つけることができません。あなたは何をしようとしているのかを説明しています。ファイルが変更されるたびにueryが起動されます。 – Squalo

+0

ファイルが変更されたときは、select * from tabellaを実行する必要があります。次に、クエリが返すレコードをループします。私は "prodotto"は各 "element"のためのものであると想像していますので、ファイル内に "prodotto"が存在するかどうかを確認できます。そうでない場合は、データベースから行を削除します。存在する場合は、クエリを実行します。 – Gaetano

+0

これは不可能です。特定の時間に製品が消え、このようにしてデータベースから削除されるためです – Squalo

関連する問題