こりんずねっと

ITのことやガジェットのことを書いてます

1列のデータを任意の列数に改行するバッチファイル

bat-file



 

バッチファイラーこりんずです。

この記事を読まれている方、バッチファイルは好きですか?私は嫌いです!

全然融通がきかない困った子で、触っているとLinuxコマンドが恋しくなります笑

 

それでも一応がんばれば使えるのがコマンドプロンプト&バッチファイル。

さぁ、それでは今回は大量のデータの改行方法をご紹介したいと思います。

 

テキストファイル内一行のデータを改行する

 

testuser1
group1
group2
testuser2
group1
group2
testuser3
group1
group2

 

上記例のようにテキストファイルの中に縦1列に並んだデータがあるとします。

このデータ以下のように任意の列数に改行したいと思います。(今回は3列に改行します。)

 

user1,group1,group2
user2,group1,group2
user3,group1,group2

実際のコード

 

::◆3列改行処理

set /a count=1

for /f "tokens=1" %%A in (kaigyou.txt) do (

if !count! lss 3 (
set /p<nul="%%A," >> output.txt
set /a count=!count!+1
) else if !count! geq 3 (
echo %%A >> output.txt
set count=
set /a count=1
)

)

 

内容を解説していきます。

 

基本はforループとifの条件分岐でテキスト内のデータを改行していきます。

今回読み込ませる対象は「kaigyou.txt」とします。

 

今回3列で改行したいのでその数をカウントする必要があります。

3行目に書かれている「set /a count=1」で最初にcount変数に1を代入してカウントする数字の準備をしておきます。

 

set /a count=1

 

5行目でforループを開始して「kaigyou.txt」を読み込みます。

forループの/fオプションはファイル内のデータを先頭から順に読み込みループ内の変数へ代入します。

上記の例だと%%Aへ順番に代入しループ処理を行うことになります。

 

次にifです。

 

if !count! lss 3 {
set /p<nul="%%A," >> output.txt
set /a count=!count!+1

 

ここでcount変数内の値が3より小さければ真なら条件分岐をします。

forで代入した%%Aの末尾、つまり現在読み込んでいる「kaigyou.txt」の行の末尾の改行コードを消して「output.txt」へリダイレクトする処理をしています。

その後count変数へ値を+1しています。

 

ここで%%Aの文字の末尾に「,(カンマ)」を付け加えています。これによりCSVなどで取り扱いやすくなります。もちろんこの区切り文字は任意のものに変えられます。

 

set /p<nul="文字列"で改行コードを消す

 

今回実行したい処理は1列に並んだテキストを3列に改行するものです。

実際に改行させる方法としてファイル内のデータ(文字)の末尾にある改行コードを削除してしまえば、その次の行にあるデータが隣にやってきてくれます。これを利用してforで任意の回数繰り返します。

 

set /p<nul="文字列" を宣言するとダブルクォーテーションで囲った文字列の末尾の改行コードが削除されます。

 

) else if !count! geq 3 (
echo %%A >> output.txt
set count=
set /a count=1
)

 

そしてifの後半部分、else ifでcount変数が3以上なら%%Aの行をoutput.txtへリダイレクトしてcount変数を1に戻します。

このelseに到達した時点でcountは3になっているのでループ処理も3回目。既に改行コードを消す処理は2回行われているので、else内では改行コードを消さずoutput.txtにリダイレクトします。

ここでリダイレクトされた文字は末尾に改行コードを保持したままなので、次にoutput.txtにリダイレクトされてくる文字は次の行に書き込まれるという仕組みになります。

 

今回の改行処理はこのループをkaigyou.txtのデータを上から下まで読み終わるまで繰り返すというものです。

 

改行バッチファイルの使い道

 

このバッチファイルの使い道ですが、これ単体ではあまり実用性はないかと思います。

実際の処理に組み込んで真価を発揮すると思います。

 

複数の処理を連携させて自動化するのがバッチファイルの魅力です。

このように改行して横並びにすることでActive DirectoryでUPNからのユーザー情報変更などが扱いやすくなります。