टेक्स्ट फ़ाइल स्रोतों के लिए कनेक्शन स्ट्रिंग पैरामीटर
पिछले लेख में मैंने एक्सेल डेटा स्रोतों के लिए कनेक्शन स्ट्रिंग पैरामीटर को कवर किया था। अब हम टेक्स्ट फाइलों पर ध्यान देंगे। टेक्स्ट फ़ाइलों की स्कीमा का वर्णन करने और एक्सेस में खोलने या लिंक करने के दौरान जानकारी का उपयोग करने के लिए अलग-अलग तरीके हैं। जबकि एक्सेल स्प्रेडशीट में संरचना की कुछ समानता थी, यह टेक्स्ट फाइलों के लिए सही नहीं है। हमें टेक्स्ट फ़ाइल की संरचना के बारे में कई सवालों के जवाब देने हैं, जिनमें शामिल हैं:
- क्या यह सीमांकित या निश्चित चौड़ाई है?
- हम कैसे बता सकते हैं कि एक कॉलम कब खत्म होता है और दूसरा कब शुरू होता है?
- पाठ उद्धृत किया गया है या नहीं?
- हमें दिनांक और समय का विश्लेषण कैसे करना चाहिए?
- मुद्रा राशियों के बारे में क्या? उन्हें कैसे प्रारूपित किया जाना चाहिए?
और संभवतः अधिक। हालांकि सीएसवी एक नज़र में अच्छी तरह से परिभाषित प्रतीत हो सकता है, लेकिन जब आप इसे खोदते हैं, तो यह वास्तव में बहुत ही कम परिभाषित होता है। इस पर कोई सार्वभौमिक सहमति नहीं है कि क्या पाठ को उद्धृत किया जाना चाहिए, तिथियों को कैसे प्रारूपित किया जाना चाहिए। उन सभी कारणों से, टेक्स्ट फ़ाइलों का उपयोग करने के लिए आमतौर पर टेक्स्ट फ़ाइल की संरचना का वर्णन करने के लिए किसी प्रकार की स्कीमा जानकारी के उपयोग की आवश्यकता होती है। स्कीमा जानकारी संग्रहीत करने के तीन तरीके हैं:
- एक
schema.ini
निर्देशिका में संग्रहीत फ़ाइल - पहुंच'
MSysIMEX
औरMSysIMEXColumns
टेबल - पहुंच'
ImportExportSpecification.XML
संपत्ति।
मामलों को जटिल बनाने के लिए, टेक्स्ट फ़ाइलों के साथ काम करने के लिए हम कई अलग-अलग तरीकों का उपयोग कर सकते हैं लेकिन सभी विधियां स्कीमा जानकारी प्राप्त करने के सभी 3 अलग-अलग तरीकों का उपयोग नहीं कर सकती हैं। उदाहरण के लिए, DoCmd.TransferText
सिस्टम टेबल के साथ काम करता है लेकिन सहेजे गए आयात/निर्यात नहीं। दूसरी ओर, DoCmd.RunSavedImportExport
ImportExportSpecification
. के साथ काम करता है वस्तु। हालांकि, ImportExportSpecification
लिंकिंग के हिस्से के रूप में उपयोग नहीं किया जाता है। तो हमारी चर्चा के लिए, हमारे पास वास्तव में टेक्स्ट फ़ाइल खोलने या लिंक करने के संदर्भ में केवल 2 विधियां उपलब्ध हैं। किसी विनिर्देश को MSysIMEXSpecs
में सहेजने के बीच अंतर को नोट करना महत्वपूर्ण है &MSysIMEXColumns
टेबल बनाम एक आयात/निर्यात सहेजना जो एक ImportExportSpecification
. बन जाता है वस्तु। हम अगले लेखों में उन 2 विधियों का पता लगाएंगे।
टेक्स्ट फ़ाइल के लिए कनेक्शन स्ट्रिंग
हमें इस बात पर विचार करना चाहिए कि एक्सेस टेक्स्ट फ़ाइल को कैसे समझेगा। पिछले लेख में, हमने देखा कि एक्सेल स्प्रेडशीट "डेटाबेस" में प्रत्येक शीट या नामित श्रेणी को "तालिका" के रूप में दर्शाया गया था। लेकिन एक टेक्स्ट फ़ाइल में ऐसा कोई निर्माण नहीं होता है। तब "डेटाबेस" क्या बनाता है? इसका उत्तर यह है कि फ़ोल्डर एक "डेटाबेस" का प्रतिनिधित्व करता है और इसलिए किसी फ़ोल्डर के भीतर कोई भी टेक्स्ट फाइल "टेबल" होती है। उस कारण से, एक ही फ़ोल्डर के लिए एकाधिक स्कीमा जानकारी होना संभव है यदि उस फ़ोल्डर में फ़ोल्डर के भीतर संग्रहीत किसी भी टेक्स्ट फ़ाइल के लिए एक से अधिक संभावित प्रारूप हैं। आप बाद में देखेंगे कि जब हम कनेक्शन स्ट्रिंग का निर्माण करते हैं, तो हम फ़ोल्डर से लिंक करते हैं, फिर व्यक्तिगत फ़ाइल को तालिका के रूप में एक्सेस करते हैं।
इसलिए, जैसा दिखाया गया है इस सेटअप का उपयोग करना:
फिर हम इस VBA कोड का उपयोग करके एक टेक्स्ट फ़ाइल खोल सकते हैं:
DAO.DatabaseSet db =DBEngine.OpenDatabase(vbNullString, False, False, "Text;DATABASE=C:\Links") के रूप मेंDim db As DAO.Database Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Text;DATABASE=C:\Links") Dim tdf As DAO.TableDef For Each tdf In db.TableDefs Debug.Print tdf.Name Dim fld As DAO.Field For Each fld In tdf.Fields Debug.Print fld.Name, Next Debug.Print Dim rs As DAO.Recordset Set rs = tdf.OpenRecordset Do Until rs.EOF For Each fld In rs.Fields Debug.Print fld.Value, Next Debug.Print rs.MoveNext Loop Debug.Print Next
यह आउटपुट देना चाहिए:
Products#csv Products Count PackDate Amount ShipDate Apples 3 12/4/2020 $ 1.02 4/12/2020 Bananas 5 4/12/2020 $ 1,234.56 12/4/2020 Figs 8 5/7/2020 $ 0.01 7/5/2020 Grapes 11 10/10/2020 $12.30 10/10/2020
निम्नलिखित बातों का ध्यान रखें:
- हमने अपनी कनेक्शन स्ट्रिंग में टेक्स्ट फ़ाइल निर्दिष्ट नहीं की। हमने इसके बजाय फ़ोल्डर का इस्तेमाल किया।
- "टेबल्स" के नाम बदल दिए गए थे क्योंकि नाम में एक डॉट एक मान्य कैरेक्टर नहीं है। एर्गो,
products.csv
बन गयाproducts#csv
। - एक्सेल की तुलना में, टेक्स्ट फ़ाइल ड्राइवर और फ़ोल्डर के पथ को निर्दिष्ट करने से परे कोई अनिवार्य पैरामीटर नहीं हैं।
अगले लेख में, आप टेक्स्ट फ़ाइलों के स्कीमा का वर्णन करने के बारे में और जानेंगे। हालांकि, कनेक्शन स्ट्रिंग के लिए ही, निम्नलिखित कीवर्ड्स को पहचाना जाता है।
FMT
पैरामीटर:टेक्स्ट फ़ाइल के प्रारूप को इंगित करें।
Delimited
:फ़ाइल को एक वर्ण द्वारा सीमांकित किया जाता है। उपयोग किया गया वर्ण स्कीमा जानकारी द्वारा निर्दिष्ट किया जाता है।
Fixed
:फ़ाइल में कॉलम के लिए निश्चित चौड़ाई है। फिर से, विशिष्ट कॉलम चौड़ाई (ओं) को स्कीमा जानकारी द्वारा निर्दिष्ट किया जाता है।
HDR
पैरामीटर:हैडर पंक्ति
YES
:पहली पंक्ति हेडर है और "टेबल"/"रिकॉर्डसेट" के लिए कॉलम नाम बन जाना चाहिए
NO
:पहली पंक्ति को अलग तरीके से नहीं माना जाता है और यह केवल एक डेटा है। सभी कॉलम नामों को "एफएन" नाम दिया जाएगा जहां "एन" 1 से शुरू होने वाली संख्या है
IMEX
पैरामीटर:आयात/निर्यात व्यवहार
यह नियंत्रित करता है कि सामग्री के आधार पर कॉलम डेटा प्रकारों को कैसे परिभाषित किया जाना चाहिए:
1
:यदि कॉलम में अलग-अलग डेटा प्रकार हैं, तो इसे एक स्ट्रिंग के रूप में मानें। अन्यथा, कॉलम का मिलान सर्वश्रेष्ठ डेटा प्रकार से करें।
2
:हमेशा नमूने के आधार पर कॉलम का मिलान एक निश्चित डेटा प्रकार से करें। यह पढ़ने में त्रुटि का कारण हो सकता है जब हम एक ऐसी पंक्ति पढ़ते हैं जिसमें डेटा होता है जो अपेक्षित डेटा प्रकार से मेल नहीं खाता है।
ACCDB
पैरामीटर:इंगित करता है कि एक्सेस ACCDB फ़ाइल स्वरूप का उपयोग कर रहा है?
डिफ़ॉल्ट रूप से, यह हमेशा ACCDB=YES को accdb फ़ाइल स्वरूप में सेट किया जाता है। हालाँकि, इसे छोड़ना या इसे NO पर सेट करना कुछ भी नहीं लगता है। यह थोड़ा रहस्य है। अगर कोई इस पैरामीटर के प्रभाव को साझा कर सकता है, तो टिप्पणी में पोस्ट करें और मैं ब्लॉग को अपडेट कर दूंगा।
DATABASE
पैरामीटर:उस फ़ोल्डर का पथ जिसमें टेक्स्ट फ़ाइलें हैं
पैरामीटर में पूरी तरह से योग्य पथ होना चाहिए। इसमें टेक्स्ट फाइलों के नाम शामिल नहीं होने चाहिए।
CharacterSet
पैरामीटर:टेक्स्ट फ़ाइलों को पढ़ने के लिए उपयोग किए जाने वाले वर्ण एन्कोडिंग की पहचान करता है।
इस पर अगले लेख में विस्तार से चर्चा की जाएगी। इसे स्कीमा जानकारी में भी वर्णित किया जा सकता है।
DSN
पैरामीटर:टेक्स्ट फ़ाइल के साथ उपयोग की जाने वाली स्कीमा जानकारी की पहचान करता है।
नाम MSysIMEXSpec
. के अनुरूप होना चाहिए , जिसका विश्लेषण बाद के लेख में किया जाएगा। यह केवल MSysIMEX***
. के साथ काम करता है टेबल। यदि आप schema.ini
का उपयोग करना चाहते हैं , आप बस कोई DSN
. शामिल नहीं करते हैं आपके कनेक्शन स्ट्रिंग्स में।
यह नोट करना महत्वपूर्ण है कि टेक्स्ट फ़ाइल ड्राइवर केवल ऊपर सूचीबद्ध मापदंडों पर विचार करेगा। अन्य कीवर्ड डालना और टेक्स्ट फ़ाइल ड्राइवर द्वारा इसे पार्स करना संभव नहीं है। इस कारण से, आप केवल कनेक्शन स्ट्रिंग से टेक्स्ट फ़ाइल के बारे में सभी विवरण निर्दिष्ट करने में सक्षम नहीं होंगे।
टेक्स्ट फ़ाइलों के लिए डिफ़ॉल्ट स्कीमा
सिद्धांत रूप में, आप बिना किसी स्कीमा जानकारी के टेक्स्ट फ़ाइल को खोल या लिंक कर सकते हैं लेकिन यह शायद ही कभी काम करेगा। इस स्थिति में, एक्सेस केवल विभिन्न विकल्पों के लिए डिफ़ॉल्ट मान लेगा। यदि टेक्स्ट फ़ाइल सभी मौजूदा डिफ़ॉल्ट के अनुरूप है तो एक्सेस फ़ाइल को पढ़ने में सफल होगी। इससे भी महत्वपूर्ण बात यह है कि टेक्स्ट फ़ाइल को खोलने या लिंक करने में त्रुटियों की अनुपस्थिति का मतलब यह नहीं है कि डेटा को सार्थक रूप से दर्शाया गया है। उदाहरण के लिए, विशेष रूप से स्वरूपित मुद्रा राशियों की व्याख्या मुद्रा के बजाय पाठ के रूप में की जा सकती है, और पाठ के भीतर अल्पविराम वाले गैर-सीमांकित पाठ को गलत तरीके से पार्स किया जा सकता है, जिससे अवांछित कॉलम जुड़ सकते हैं। डिफ़ॉल्ट दो संभावित स्थानों पर निर्धारित होते हैं:
- पहुंच रजिस्ट्री सेटिंग्स को देखेगा। Office 365 स्थापना के लिए, रजिस्ट्री यहाँ स्थित हो सकती है:
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Access Connectivity Engine\Engines\Text
. हम अगले लेखों में इस स्थान को "पाठ्य रजिस्ट्री कुंजियाँ" के रूप में संदर्भित करेंगे। - सेटिंग्स जो आप
Region
में देखेंगे विंडोज के कंट्रोल पैनल में एप्लेट। हम इस स्थान को "Windows सेटिंग" के रूप में संदर्भित करेंगे।
पाठ फ़ाइलों के लिए एन्कोडिंग पर ध्यान दें
अपनी टेक्स्ट फ़ाइलों तक पहुँचने के लिए आप किन विधियों का उपयोग कर सकते हैं, इस पर ध्यान दिए बिना सही एन्कोडिंग होना अनिवार्य है। जब आपकी टेक्स्ट फ़ाइल की सामग्री केवल ASCII बिंदुओं के निचले आधे हिस्से (जैसे 0-127) तक ही सीमित होती है, तो यह शायद ही मायने रखता है कि आप अपनी टेक्स्ट फ़ाइलों के लिए कौन सी एन्कोडिंग चुनते हैं। डिफ़ॉल्ट आमतौर पर काफी अच्छा होता है। हालाँकि, यदि आपकी टेक्स्ट फ़ाइलों में कोई यूनिकोड या 127 से अधिक कोई वर्ण हो सकता है, तो यह आप पर है, डेवलपर, एन्कोडिंग को जानने के लिए। यदि गलत एन्कोडिंग निर्दिष्ट है, तो टेक्स्ट अपेक्षित रूप से आयात नहीं हो सकता है और कोई त्रुटि नहीं फेंकेगा। गड़बड़ विवरण के लिए, मैं आपको इस मामले में जोएल स्पोल्स्की के पास भेजूंगा।
schema.ini
के बीच चयन करना और MSysIMEX***
टेबल
जैसा कि आप अगले लेखों में देखेंगे, दोनों विधियों में क्षमताओं में काफी बड़ा ओवरलैप है। इसलिए, आपके पास इनमें से किसी एक का उपयोग करने का विकल्प हो सकता है। मुख्य अंतर इस बात पर उबलता है कि क्या आप चाहते हैं कि स्कीमा आपके एप्लिकेशन के भीतर या उस फ़ोल्डर में संग्रहीत हो जहां टेक्स्ट फ़ाइलों की अपेक्षा की जाती है। जब आप schema.ini
. का उपयोग करते हैं फ़ाइल, आप मान रहे हैं कि पाठ फ़ाइलें एक निश्चित फ़ोल्डर में मौजूद होंगी और उनका एक निश्चित नाम होगा।
MSysIMEX***
. के साथ , आप किसी भी पाठ फ़ाइल को कहीं से भी केवल परिभाषित विनिर्देश का संदर्भ देकर संसाधित कर सकते हैं। हालांकि, एक्सेस के बाहर विनिर्देश को संपादित करना आसान नहीं है। एक्सेस के भीतर भी, UI का उपयोग करके विशिष्टताओं को बदलना आसान नहीं है। schema.ini
कुछ अतिरिक्त सुविधाएं हैं जो सीधे MSysIMEX***
. के साथ उपलब्ध नहीं हैं टेबल।
फिर भी, यह तय करने में कि किसका उपयोग करना है, यह तय करने में आपका सबसे महत्वपूर्ण कारक होगा कि विनिर्देश को कहाँ संग्रहीत किया जाए।
निष्कर्ष
दिनांक या मुद्रा मात्रा वाली किसी भी टेक्स्ट फ़ाइल के लिए स्कीमा जानकारी परिभाषित करने के लिए आपको दृढ़ता से प्रोत्साहित किया जाता है। दिनांक और मुद्रा राशियाँ क्षेत्रीय सेटिंग के प्रति संवेदनशील होती हैं जो डेटा के सही विश्लेषण में हस्तक्षेप कर सकती हैं। चूंकि हमारे पास दो अलग-अलग सिस्टम हैं जिनमें अलग-अलग उपलब्ध विकल्पों के सेट हैं, इसलिए हमें अगले लेखों में प्रत्येक पर विचार करना चाहिए। आपके पास या तो उपयोग करने का विकल्प है (या यहां तक कि दोनों अलग-अलग टेक्स्ट फ़ाइलों के बीच)। अब हम schema.ini
. की ओर रुख करेंगे अगले लेख में। हम बाद में MSysIMEX***
. देखेंगे निम्नलिखित लेख में टेबल।