2013-04-30 62 views
2

我們有 2個Unicode文件。其中一個包含另一個文件中缺少的行。像這樣:合併兩個unicode文本文件的非空行,使用windows批處理

1. 
2. bbbbbbbbbbbbbbbbb 
3. 
4. ddddddddddddddddddddd 
5. eeeeeeeeeeeeeeeeeeeeeeee 


1. aaaaaaaaaaaaaa 
2. 
3. ccccccccccccccccc 
4. 
5. 

我們希望將它們合併到第三個文件將包含所有行:

1. aaaaaaaaaaaaaa 
2. bbbbbbbbbbbbbbbbb 
3. ccccccccccccccccc 
4. ddddddddddddddddddddd 
5. eeeeeeeeeeeeeeeeeeeeeeee 

注:
A,B ,c,d,e - 可以是任何文本。
行號僅用於說明目的,它們不存在於實際文件中。

我用「批處理文件」標籤創建了這個問題,但我對任何有關如何實現這一點的建議持開放態度。當然最好不要涉及類似C++的東西

+0

什麼是合併的標準是什麼?是字典順序,還是實際文件將在適當的地方包含空白行,如在您的示例中?兩個文件中可以存在相同的行嗎? – Alexander 2013-04-30 18:04:32

+0

是的,這兩個文件包含的行數完全相同,如果它在一個文件中是空白的,它肯定會被填充到另一個文件中。當然,這兩個文件中有些行是空的,所以我們最終不會添加任何內容,但兩個文件中都不會有2個完整行。 – user2333940 2013-04-30 19:59:14

+0

簡單地說,這種算法將工作: 1)以其中一個文件爲基礎 2)在第二個文件中爲每一行檢查是否爲空 3)如果空白 - 移動到下一行,如果不是 - 添加它基於文件,然後移動到下一行。 但是我寧願將輸出保存在新文件中,而不是修改其中一個源 – user2333940 2013-04-30 20:18:38

回答

1

假設沒有行以冒號開頭,我們首先從兩個文件讀取每行到兩個數組,包括空行 - 這裏有一個特殊的黑客攻擊,因爲正常的跳空行。 然後只是串聯從兩個陣列的元素具有相同的索引,並輸出到RESULTS.TXT:

setlocal EnableDelayedExpansion 

set i=0 
for /f "tokens=1* delims=:" %%A in ('type "file1.txt" ^| findstr /n "^"') do (
    set /A i+=1 
    set arr1[!i!]=%%B 
) 

set i=0 
for /f "tokens=1* delims=:" %%A in ('type "file2.txt" ^| findstr /n "^"') do (
    set /A i+=1 
    set arr2[!i!]=%%B 
) 

for /L %%i in (1,1,%i%) do echo.!arr1[%%i]!!arr2[%%i]!>> result.txt 
+0

它幾乎可以工作,但在某些地方,我假定兩個文件都有空行,它會寫入文本「ECHO關閉」。 我將此標記爲答案,因爲我可以刪除「ECHO關閉」。作爲第二步,但如果你知道如何解決這個問題,請回復。 無論如何,謝謝! – user2333940 2013-04-30 21:02:19

+0

是的,對不起。我編輯了我的答案 - 只需在最後一個回顯命令後包含點。 – Alexander 2013-04-30 21:09:16

相關問題