2012-12-12 41 views
0

我得到了具有18000+行和7列的CSV文件。當我保存它從Excel到.txt和在記事本中打開它這樣表示:更改文本文件中多行的位置

10012 CITY 10012 CITY RIKSDAGEN CITY lokal 10 

但我想改變它,可以說:第一市(2 10012之後)開始在第6位和第二個10012在一個固定的位置(可以說26)等

我想我需要切換'標籤'空間與規則的空間,但與18000+行..是的。 我不知道這是否可以在vba中完成,或者如果我是一個程序?

編輯:我想要的位置是6,26,31,51,81

10012CITY 10012CITY RIKSDAGEN CITY lokal 10 
1 6  26 31  51   81 

回答

1

一種可能性是在Excel本身準備數據:

A2:H2:字符串位置(1; 6; 26 ..)
A3:H3:你的數據

I3=A3&REPT(" ";B$2-A$2-LEN(A3))
公式可以複製到右側和下側。

結果將是具有添加空格的單元格,它們可以連接成一個單元格(=I3&J3...&P3),並在需要的位置包含空格。連接的單元格的內容可以直接複製粘貼到記事本。

電子表格示例:http://www.bumpclub.ee/~jyri_r/Excel/Getting_fixed_length_csv_file.xls

+0

謝謝Jüri,這工作! – Rob

0

一兩件事,那不是明確的是,如果你的領域都是已知不超過一定的長度。例如,第一個字段(10012)的長度始終是5個字符或更少?假設它是,最簡單的方法是首先將文件另存爲CSV文件。然後你可以使用awk格式化它。讓我們調用保存的文件foo.csv。然後,您將執行:

gawk'{printf'%Ms%Ps%Qs%Rs%Ts%Us%%Vs%Ws \ n「,$ 1,$ 2,$ 3,$ 4,$ 5,$ 6,$ 7,$ 8 }'foo.csv

在上面的命令中,您需要用M,P,Q,R,T,U,V,W替換適當的數字。由於(如果?)已知第一個字段不超過5個字符,您可以將M設置爲5.由於「CITY」有四個字符,並且您希望第二個「10012」從位置20開始,所以需要「CITY」佔用15個空間,並且在這個15個空間領域也被左對齊。因此,您將P設置爲-15。 「-15」中的「 - 」確保「CITY」從該字段的左側開始。繼續下去,直到完成所有的字段。

如果將它寫在一張已繪製列的紙上,可能會更容易得到字段編號。

EDIT:AWK「{printf的 「%-5S%-20s%-5S%-20s%-30s%S%S%S \ n」 個,$ 1,$ 2,$ 3,$ 4 $ 5,$ 6 $ 7,$ 8}'foo.csv

您還沒有指定最後幾個字段的位置,但上面應該給你足夠的信息來解決這個問題。

+0

哦,對不起。是的,第一個字段總是5個字符。我編輯了原始帖子 – Rob

+0

eer所需的指定位置,我從未使用過Gawk,但我只是安裝了它。我從哪裏去寫下你的代碼並執行? – Rob

+0

@rob,如果你安裝了gawk,你只需要執行: gawk'{printf'%-5s%-20s%-5s%-20s%-30s%s%s%s \ n「,$ 1, $ 2,$ 3,$ 4,$ 5,$ 6,$ 7,$ 8}'foo.csv 從命令行。你在用什麼系統? –