私はIveが取り組んでいることに関するいくつかのガイダンスを探しています。私は3つの異なるフォーマットのデータをフォーマットされたデータに変換しようとしています。VIMを使用してAからBへの変換
これは私が変換する必要があるデータである。
ABCDEFGHIJKL 00100 C N12345678W1234567891234 GND 99999MMY LITTLE TEST 000000000
ABCDEFGHIJKL 00100 H N12345678W123456789 GND 99999MANOTHER LITTLE TEST 000000000
ABCDEFGHIJKL 00200 L N12345678W123456789N12345678W12345678912341234 000000000
ABCDEFGHIJKL 00300 G N12345678W123456789 000000000
これは私が希望の出力です:
0010|C|||N12345678|W123456789|123.4
0010|H|N12345678|W123456789||
0020|L|N12345678|W123456789|N12345678|W123456789|123.4|123.4
0030|G|N12345678|W123456789|
私は挿入ボタンをマッピングしています
map <Insert> :%s/...................................................$/<ESC> :%s/....................//<ESC> :%s/0 G /\|G\|/e<ESC> :%s/0 C /\|C\|/e<ESC> :%s/0 H /\|H\|/e<ESC> :%s/0 L /\|L\|/e<ESC> :%s/0 R /\|R\|/e<ESC> :%s/e0/\|E0/ge<ESC> :%s/w0/\|W0/ge<ESC> :%s/w1/\|W1/ge<ESC> :%s/ /\|\|<ESC> :%s/e1/\|E1/ge<ESC> :%s/ //e<ESC>:%s/\s\+$//<ESC> :%s#\d\{4}$#\=printf('\|%.1f', str2nr(submatch(0))/10.0)#e<ESC>
私は次のように少しの制限を加えて変換しています:
最初の4桁の後の文字は、G、C、H、LまたはRのいずれかにすることができます。
私の問題は、findとreplaceを使ってNをNに変更すると、すべてを置き換えて2つを追加するというものです。 ||見つけた最初のNの前に。また、|円弧が描かれているときの小数点で、LとRのどちらかです。
助けてください。
EDIT:
が最後に余分な文字を取り除きます:
:%s/...................................................$/<ESC>
が先頭に余分な文字を取り除きます:
:%s/....................//<ESC>
は、余分なスペースを取り除くと追加取得します|最初の文字の前後に:
:%s/0 G /\|G\|/e<ESC>
余分なスペースを取り除いてaを追加します。最初の文字の前後に:
:%s/0 C /\|C\|/e<ESC>
余分なスペースを取り除いてaを追加します。最初の文字の前後に:
余分なスペースを取り除いてaを追加します。最初の文字の前後に:
:%s/0 L /\|L\|/e<ESC>
余分なスペースを取り除いてaを追加します。最初の文字の前後に:
:%s/0 R /\|R\|/e<ESC>
a |座標のためのコンパスの方向の正面
:%s/e0/\|E0/ge<ESC>
a |座標のためのコンパスの方向の正面
:%s/w0/\|W0/ge<ESC>
a |座標のためのコンパス方向の前にある。
:%s/w1/\|W1/ge<ESC>
追加|| 1組の座標を扱うときのために
:%s/ /\|\|<ESC>
a |
:%s/ //e<ESC>
任意の空白と末尾の文字を取り除く:
:%s/\s\+$//<ESC>
描画するときに座標
:%s/e1/\|E1/ge<ESC>
のためのコンパス方向のインフロントは私がこれを置く理由はわからwuiteありませんLを使用してCまたは円弧を使用して円を描くと、末尾の数字が10進数に変換され、|それを分離するために、インフロント:
:%s#\d\{4}$#\=printf('\|%.1f', str2nr(submatch(0))/10.0)#e<ESC>
awkを使用する方が簡単でしょう... – Kent
マッピングを分解し、複数の行に分割し、各行が何を考えているかを教えてください。また、なぜそれぞれのコマンドを ''の代わりに ''で終了するのですか? –
Iveはすでに作成されたマップされたキーコードを分解したものを追加しました。LまたはRで始まるシーケンスを扱うときに、小数点の最初のロットをどのように変換するかを理解する必要があります。余分な座標の前にこれが出てきました::%s/L ..................... N/........ .............. \ | N/eしかし、これはどのように私は必要なものを置き換えるので、任意の文字としてドットを使用する方法任意のアイデアをドットで置き換えますか? –
Moneyboi