2012-06-08 7 views
11

का उपयोग कर एक्सेल में लिनक्स टेक्स्ट फ़ाइल लोड हो रहा है मेरे पास लिनक्स पर एक टेक्स्ट फ़ाइल बनाई गई है, अगर मैं इसे वर्ड पैड में खोलता हूं तो फाइल सामान्य रूप से दिखाई देती है। हालांकि जब मैं इसे नोटपैड में खोलता हूं, और जब मैं इसे नीचे दिए गए कोड का उपयोग करके एक्सेल में लोड करने का प्रयास करता हूं तो यह एक पंक्ति के रूप में दिखाई देता है।वीबीए

' Open the file 
Open Filename For Input As #1 

' Look for the Table Title 
Do While Not (EOF(1) Or InStr(TextLine, TableTitle) > 0) 
    Line Input #1, TextLine 
Loop 

मैं इसे मूल पंक्तियों में कैसे विभाजित कर सकता हूं? क्या लाइन सेपरेटर का अंत है, क्या वीबीए उपयोग कर सकता है?

उत्तर

11

लिनक्स के बजाय एक नई लाइन गाड़ी वापसी बतलाने के लिए लाइन फ़ीड (\n) का उपयोग करता + लाइन फ़ीड (\r\n) विंडोज द्वारा प्रयोग किया जाता के रूप में तो आप Line input उपयोग नहीं कर सकते, बजाय:

Open Filename For Input As #1 
'//load all 
buff = Input$(LOF(1), #1) 
Close #1 

'//*either* replace all lf -> crlf 
buff = replace$(buff, vbLf, vbCrLf) 
msgbox buff 

'//*or* line by line 
dim lines() As String: lines = split(buff, vbLf) 
for i = 0 To UBound(lines) 
    msgbox lines(i) 
next 
+0

यदि आपको लाइन-बाय-लाइन प्रोसेसिंग करना है, तो आप 'buff = $ (buff, vbCrLf, vbLf) '_and_ को बदलना चाहते हैं, फिर' split() 'तर्क करें। इस तरह विंडोज लाइन के अंत यूनिक्स शैली के लिए सामान्यीकृत हैं। – kornman00

3

समारोह

Public Function GetLines(fpath$) As Variant 
    'REFERENCES: 
    'Microsoft Scripting Runtime // Scripting.FileSystemObject 
    'Microsoft VBScript Regular Expressions 5.5 // VBScript_RegExp_55.RegExp 
    Dim fso As New Scripting.FileSystemObject, RE As New VBScript_RegExp_55.RegExp 
    If fso.FileExists(fpath) = True Then 
     Dim mts As MatchCollection, mt As Match 
     Dim lines() As String 
     Dim content$: content = fso.OpenTextFile(fpath).ReadAll() 
     With RE 
      .Global = True 
      .Pattern = "[^\r\n]+" 'catch all characters except NewLines/Carraige Returns 
      If .test(content) = True Then 
       Set mts = .Execute(content) 
       ReDim lines(mts.Count - 1) 
       Dim pos& 
       For Each mt In mts 
        lines(pos) = mt.Value 
        pos = pos + 1 
       Next mt 
      Else 
       MsgBox "'" & Dir(fpath) & "' contains zero bytes!", vbExclamation 
      End If 
     End With 
     GetLines = lines 
    Else 
     MsgBox "File not found at:" & vbCrLf & Dir(fpath), vbCritical 
    End If 
End Function 

और (immediate window से)

?GetLines("C:\BOOT.INI")(2) 

और आउटपुट

default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS 

ऊपर के उदाहरण किसी भी पाठ फ़ाइल से से उत्पन्न सभी लाइनों प्राप्त करने के लिए इस्तेमाल किया जा सकता द्वारा लागू किया जा सकता है कोई ओएस


उम्मीद है कि इससे मदद मिलती है।

+0

2 साल बाद और इसने मुझे बहुत काम बचाया है, बहुत बहुत धन्यवाद। यह तब तक नहीं हुआ जब तक चीजें गलत नहीं हुईं, कि जिन फाइलों पर मैं काम कर रहा हूं, वे कई अलग-अलग ऑपरेटिंग सिस्टम से निकलते हैं! यह एक जीवन बचतकर्ता है। – RossC