2008-10-01 4 views
5

मुझे एक MySQL तालिका में बड़े पैमाने पर (24 एमबी) टेक्स्ट फ़ाइलों को आयात करने की आवश्यकता है। प्रत्येक पंक्ति इस तरह दिखता है:मैं व्हाइटस्पेस-सीमांकित टेक्स्ट फ़ाइल को MySQL में कैसे आयात करूं?

1 1 0.008 0 0 0 0 0          

प्रत्येक क्षेत्र के बाद एक या अधिक रिक्त स्थान हैं, और पिछले क्षेत्र न्यू लाइन से पहले के बारे में 36 रिक्त स्थान द्वारा पूंछ है।

मैं ऐसी फ़ाइल को MySQL में कैसे आयात करूं? प्रलेखन से ऐसा लगता है कि लोड डेटा उम्मीद करता है कि सभी फ़ील्ड बिल्कुल उसी स्ट्रिंग द्वारा समाप्त हो जाएं। मैं

LOAD DATA INFILE 'filename' INTO TABLE mytable FIELDS TERMINATED BY ' '; 

की कोशिश की है, लेकिन MySQL एक खाली क्षेत्र परिसीमन के रूप में एक से अधिक स्थान का एक अनुक्रम व्याख्या करेगा।

कोई भी विचार?

उत्तर

9

यदि आप यूनिक्स/लिनक्स पर हैं तो आप इसे sed के माध्यम से रख सकते हैं।

sed 's/ \+/ /g' thefile > thefile.new 

यह एक अंतरिक्ष के साथ कई स्थानों में से सभी दृश्यों की जगह:

एक टर्मिनल और प्रकार खोलें।

0

आप जौको द्वारा पोस्ट किए गए वही कमांड का उपयोग भी डेलीमीटर को ';' में बदलने के लिए कर सकते हैं या \ n। इससे भी मदद मिलेगी।

+0

वास्तव में; MySQL फ़ील्ड डिलीमीटर के रूप में रिक्त स्थान से काफी खुश है, यह केवल एक ही समस्या है जो यहां एक समस्या है। और एलएफ का उपयोग करके यह बदतर हो जाएगा क्योंकि वे रिकार्ड डिलीमीटर के समान होंगे! –

0

क्या आप इस व्यावहारिक रूप से ऐसा कोई तरीका नहीं कर सकते हैं?)

;

<?php 

$db = mysql_connect('host', 'user', 'password') 
or die('Failed to connect'); 
mysql_select_db('database', $db); 

$fileHandle= @fopen("import.file", "r"); 
if ($fileHandle) { 
    while (!feof($fileHandle)) { 
     $rawLine = fgets($fileHandle, 4096); 

     $columns = preg_split("/\s+/", $rawLine); 

     //Construct and run an INSERT statement here ... 

    } 
    fclose($fileHandle); 
} 

?> 

संपादित कहा जा रहा है, Jakal's सुझाव दूर neater है: एक साधारण PHP स्क्रिप्ट में फ़ाइल की रिक्ति द्वारा विभाजित लोड, और बिल्कुल भी समय नहीं में एक डालने करने में सक्षम हो जाएगा

2

यदि आप विंडोज पर हैं, तो बस Excel का उपयोग करें।

एक्सेल एक व्हाइटस्पेस-सीमांकित फ़ाइल आयात करेगा (आयात मेनू से 'बाद वाले डिलीमीटरों को एक के रूप में देखें' चेक करें)।

तो फिर तुम बस एक्सेल से एक CSV फ़ाइल के रूप में बचाने के लिए और का उपयोग कर MySQL में आयात कर सकते हैं:

LOAD DATA INFILE 'filename' INTO TABLE mytable FIELDS TERMINATED BY ','; 
नहीं
संबंधित मुद्दे