2015-09-11 18 views
0

我有大約400個大約41000個損壞行的文本文件。在文本文件中查找損壞的行並將它們寫在上面的行後面

我正在尋找一個選項(VBA也許?),它會搜索這些損壞的行並基本執行退格,以便將損壞的行寫在行後面,因爲損壞是由不需要的wordwrap引起的。腐敗行的指標是它們不以字母TEQ開頭。

有沒有人知道如何以及在哪裏構建這樣的腳本?搜索和替換不起作用,因爲我不能,但顯然替換領域的退格。 在此先感謝!

編輯:

損壞線的一個例子:

TEQ;231232;OFNENJD;29840389;TPOS; 
TEQ;54111232;O2D;29829; 
TPOS; 

線3是損壞的之一,因爲它屬於第2行,但有一個換行。我需要執行一個退格讓它回到第二行。這就是我想要的自動化功能。

+0

您可以在「查找」字段中放置空格。 (: –

+0

感謝您的回答!但找到線不是我的問題,我已經整理出來了,但因爲有41K +,我不想手動做退格41000次,所以我需要一些東西。全部更換 –

+0

我從Excel出口因此,每列分隔用semikolon 例如,它看起來是這樣的: TEQ; 2341; GJGJG; 092139; 9078; dbhd; TEQ; 1241; GJGJG ; 093319; 9018; dbhd。 ;; 3號線將是一個腐敗的一個 –

回答

1

要隔離壞的行尾,首先要將好的行尾轉換爲摘要。然後,您可以刪除vbCrLF或vbLf,這會將它們背離它們。最後一步是通過反轉摘要來恢復良好的行結束。

dim str as string 
'use your favorite method to read the TXT file into the str variable 
str = Replace(str, chr(59) & vbCrLf & "TEQ;", chrw(8203)) 'convert good eol to unicode zero-length space 
str = Replace(str, vbLf, vbNullString) 'remove bad eols 
str = Replace(str, chrw(8203), chr(59) & vbCrLf & "TEQ;") 'revert back to good eol 
'write the str back to the TXT file 

它不會是一個壞主意,扔幾個.TXT文件放到一個十六進制編輯器,以確定是否壞結束線,vbCrLf(CHR(13)&人權委員會創建( 10))或者只是vbLf(Chr(10))。儘管我懷疑好的結果是vbCrLF,而壞的結果只是vbLf,但是和好的結尾一樣。

下面的子過程需要您進入VBE的工具►引用,並添加Microsoft腳本運行時到項目中。

Sub fix_TEQ_text() 
    Dim str As String, fp As String, fn As String 
    Dim fso As New FileSystemObject, ts As TextStream 

    fp = Environ("TEMP") 
    fn = Dir(fp & Chr(92) & "TEQ*.txt", vbNormal) 

    Do While CBool(Len(fn)) 
     If Not CBool(InStr(1, fn, "_fixed", vbTextCompare)) Then 
      Set ts = fso.OpenTextFile(fp & Chr(92) & fn, ForReading) 
      str = ts.ReadAll 
      ts.Close 

      str = Replace(str, Chr(59) & vbCrLf & "TEQ;", ChrW(8203)) 'convert good eol to unicode zero-length space 
      str = Replace(str, vbLf, vbNullString) 'remove bad eols 
      str = Replace(str, ChrW(8203), Chr(59) & vbCrLf & "TEQ;") 'revert back to good eol 

      Set ts = fso.CreateTextFile(fp & Chr(92) & Replace(fn, ".txt", "_fixed.txt"), True) 
      ts.Write str 
      ts.Close 

     End If 
     fn = Dir 
    Loop 
End Sub 

您將要改變的文件路徑(例如FP)和文件掩碼(目前"TEQ*.txt"這符合我的樣本TXT文件)。

+0

我不知道我是否正確理解了你,但是這是否找到損壞的行結束? –

+0

行結束/換行/回車/段落只是一些ASCII控制代碼;通常是ASCII字符0×0D(Chr(13)),後面是0×0A(Chr(10)),或者僅爲0×0A。壞的模式並不存在,但好的模式是有的。如果你用別的東西替換好的東西,那麼你已經隔離了壞東西。處理壞的問題,然後恢復你對好的問題所做的改變。 – Jeeped

+0

好吧,我明白了。但是我需要的恰恰就是你說「處理壞的東西」的地方。我有41000行已損壞,只需要一個退格便可。但手動做這件事需要一個星期左右的時間。我只需要一行代碼,當我有一個損壞的行時,它會退格。 –

相關問題