0

18000 行以上、7 列のこの CSV ファイルを取得しました。Excel から .txt に保存してメモ帳で開くと、次のように表示されます。

10012   CITY    10012   CITY    RIKSDAGEN   CITY lokal  10

しかし、私はそれを変更したいので、最初のCITYは位置6(10012の2の直後)から始まり、2番目の10012は固定位置(26としましょう)など.

「タブ」スペースを通常のスペースに切り替える必要があると考えましたが、18000行以上..そうです。これが vba で実行できるのか、それともプログラムで実行できるのかわかりません。

編集:私が望む位置は6,26,31,51,81です

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

2 に答える 2

1

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

于 2012-12-13T06:04:40.470 に答える
0

明確でないことの 1 つは、すべてのフィールドが特定の長さを超えないことがわかっているかどうかです。たとえば、最初のフィールド (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" は 4 文字で、2 番目の "10012" を 20 の位置から開始する必要があるため、"CITY" が必要です。 15 スペースを占め、この 15 スペースのフィールドで左寄せにします。したがって、P を -15 に設定します。「-15」の「-」は、「CITY」がそのフィールドの左側から始まることを保証します。すべてのフィールドが完了するまで続行します。

列が描かれた紙に書き留めておくと、フィールド番号を正しく取得するのがおそらく簡単でしょう。

編集: awk '{printf "%-5s%-20s%-5s%-20s%-30s%s %s %s\n", $1, $2, $3, $4, $5, $6, $7, $8}' foo .csv

最後のいくつかのフィールドの配置を指定していませんが、上記でそれを修正するのに十分な情報が得られるはずです。

于 2012-12-12T17:44:04.270 に答える