2012-07-17 13 views
33

में लाइन द्वारा पाठ फ़ाइल फ़ाइल को पढ़ें/पार्स करें, मैं वीबीए का उपयोग करके एक टेक्स्ट दस्तावेज़ को पार्स करने और पाठ फ़ाइल में दिए गए पथ को वापस करने की कोशिश कर रहा हूं।
उदाहरण के लिए, पाठ फ़ाइल लगेगा जैसे:वीबीए

*Blah blah instructions 
*Blah blah instructions on line 2 
G:\\Folder\...\data.xls 
D:\\AnotherFolder\...\moredata.xls 

मैं VBA एक समय में 1 लाइन लोड करना चाहते हैं, और अगर यह एक * साथ शुरू होता है तो किया जा रहा है अगली पंक्ति (है कि रेखा के समान करने के लिए ले जाने के टिप्पणी की)।
1: एक फ़ाइल पथ के साथ लाइनों के लिए, मैं सेल करने के लिए उस पथ लिखना चाहते हैं, पहले पथ, अगले के लिए B2, आदि

मुख्य बातों मैं जवाब दे दिया है की उम्मीद कर रहा था के लिए A2 का कहना है। वीबीए का उपयोग कर पाठ फ़ाइल के माध्यम से पढ़ने का सबसे अच्छा/सरल तरीका क्या है?
2. मैं लाइन से उस पंक्ति को कैसे कर सकता हूं?

उत्तर

51
एक पाठ फ़ाइल का सबसे बुनियादी पढ़ने के लिए

, का उपयोग open

उदाहरण:

Dim FileNum As Integer 
Dim DataLine As String 

FileNum = FreeFile() 
Open "Filename" For Input As #FileNum 

While Not EOF(FileNum) 
    Line Input #FileNum, DataLine ' read in data 1 line at a time 
    ' decide what to do with dataline, 
    ' depending on what processing you need to do for each case 
Wend 
+7

मैं एक पार्टी के लिए बहुत देर हो चुकी है, लेकिन लाइन इनपुट में सख्ती से सीआर या सीआरएलएफ संयोजन (यानी एलएफ) के अलावा किसी अन्य चीज की समस्या है - एफएसओ में ऐसी कोई समस्या नहीं है (लेकिन हाँ, शायद थोड़ा धीमा है) –

+10

याद रखें #FileNum अतं मै! –

+1

किसी और के लिए सोच रहा है: 'डेटालाइन' को 'सीआर' या' सीआरएलएफ '([स्रोत] (https://msdn.microsoft.com/en-us/library/aa243392%28v=vs.60%29 को समाप्त करना शामिल नहीं है। एएसपीएक्स)) – Felipe

26

मैं फ़ाइलों

Dim fso As FileSystemObject: Set fso = New FileSystemObject 
Set txtStream = fso.OpenTextFile(filePath, ForReading, False) 

तो पढ़ने के लिए सबसे आसान तरीका है एक TxtStream साथ FileSystemObject लगता है इस txtStream ऑब्जेक्ट के साथ आपके पास सभी प्रकार के टूल्स हैं जो इंटेलिजेंस उठाते हैं (FreeFile() विधि का उपयोग करने के विपरीत) तो कम गोंद है sswork। इसके अलावा आपको एक फ्रीफाइल असाइन करना होगा और आशा है कि जब भी आप इसे सौंपेंगे तब भी यह वास्तव में मुफ़्त है।

Do While Not txtStream.AtEndOfStream 
    txtStream.ReadLine 
Loop 
txtStream.Close 

नोट:: यह माइक्रोसॉफ्ट स्क्रिप्टिंग रनटाइम के लिए एक संदर्भ की आवश्यकता है

आप की तरह एक फ़ाइल पढ़ सकते हैं।

+0

धन्यवाद। मुझे लगता है कि यह भी पूरा करेगा जो मैं चाहता था कि ठीक है – dancran

+3

असल में, 'टेक्स्टस्ट्रीम' ऑब्जेक्ट के रूप में 'txtStream' को आयाम के बिना, कोई इंटेलिजेंस नहीं होगा – ElRudi

23

पूर्णता के लिए; स्मृति में लोड डेटा के साथ काम करना;

dim hf As integer: hf = freefile 
dim lines() as string, i as long 

open "c:\bla\bla.bla" for input as #hf 
    lines = Split(input$(LOF(hf), #hf), vbnewline) 
close #hf 

for i = 0 to ubound(lines) 
    debug.? "Line"; i; "="; lines(i) 
next 
+1

यह सही उत्तर है। आप FileSystemObject में भी ऐसा कर सकते हैं, लेकिन सुरक्षा प्रतिबंधों के कारण एफएसओ अक्सर चलाने में विफल रहता है, और यह काफी धीमी है। –

+2

... लेकिन मानता है कि फ़ाइल मेमोरी में फिट होगी –

4

आप पाठ फ़ाइल में लाइन द्वारा लाइन को पढ़ने के लिए इस कोड का उपयोग कर सकते हैं और तुम भी पहले चरित्र के बारे में जांच कर सकता है "*" तो आप उस छोड़ सकते हैं ..

Public Sub Test() 

    Dim ReadData as String 

    Open "C:\satheesh\myfile\file.txt" For Input As #1 

    Do Until EOF(1) 
     Line Input #1, ReadData 'Adding Line to read the whole line, not only first 128 positions 
    If Not Left(ReadData, 1) = "*" then 
     '' you can write the variable ReadData into the database or file 
    End If 

    Loop 

    Close #1 

End Sub