[前の記事]« 特定のアプリの保存先を検索してファイルを削除したい
[次の記事]フォルダを削除するコマンド »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「SET, PATH, %環境変数%」索引へ
▲カテゴリー「文字列の操作」索引へ

2ファイルを1行ずつ交互に読み込むには

1689.
2ファイルから1行ずつ改行して読み込みたい
2007年03月04日(日) 22時11分
XYZ
どなたかこんなバッチつくれませんか?? 
2ファイルを1行ずつ改行して読み込む処理です。
OSはWindowsXP proです。 
x.txt y.txt 
---- ---- 
aaa 111 
bbb 222 
---- ---- 
↓↓↓↓↓ 
z.txt 
---- 
aaa 
111 
bbb 
222 
---- 
1690.
Re:2ファイルから1行ずつ改行して読み込みたい
2007年03月05日(月) 10時20分
otn
>どなたかこんなバッチつくれませんか?? 
>2ファイルを1行ずつ改行して読み込む処理です。
>OSはWindowsXP proです。 
>x.txt y.txt 
>---- ---- 
>aaa 111 
>bbb 222 
>---- ---- 
>↓↓↓↓↓ 
>z.txt 
>---- 
>aaa 
>111 
>bbb 
>222 
>---- 

unix系のjoinコマンドなどを使わないとすると、1つめのファイルをまず読んで変数に全部保存しておき、2つめのファイルを読みながらさっき保存した内容と並べて表示することになりますね。

http://d.hatena.ne.jp/otn/20040302/
に、ファイルを読んで変数に保存し、全部読んでからそれを参照するサンプルがあります。
ちょっとご希望の機能そのもののスクリプトを書くモチベーションがわかないので(歳のせいか?)、まずはこれまで。、
1691.
Re:2ファイルから1行ずつ改行して読み込みたい
2007年03月05日(月) 12時56分
YanaKen◆c0rnJ1Q=
XYZさん、こんにちは。

 otnさんのコメントと趣旨がかぶりますが、モチベーションがわかないとのことですし(^^;、気分転換がわりに作ってみたので……。
 一方のテキストを行単位でファイルに書き出し、あとで組み合わせる方式で作ったサンプルです。
※2つのファイルの行数が違う場合とか、データに区切り文字が含まれる場合とか、もろもろ細部は深く考えてません。

YanaKen

@echo off
if exist z.txt del z.txt
set count=0
for /f %%i in (x.txt) do call :output1 %%i
set count=0
for /f %%j in (y.txt) do call :output2 %%j
goto after

:output1
 echo %1>%count%.txt
 set /a count=count+1
 exit /b
:output2
 type %count%.txt>>z.txt
 echo %1>>z.txt
 set /a count=count+1
 exit /b
:afterdelete
 if exist %count%.txt del %count%.txt
 set /a count=count+1
 exit /b

:after
 set count=0
 for /f %%i in (x.txt) do call :afterdelete %%i
 exit /b


1692.
Re:2ファイルから1行ずつ改行して読み込みたい
2007年03月05日(月) 15時34分
*
両御所とも、資源喰い過ぎ。
最初に行数をカウントして、
あとはカウントだけ繰り返し
set/pで読み取ればいいのですよ。

作ってくれ君な上にマルチなので
サンプルを作るモチベーションが湧きませんが。
1694.
Re:2ファイルから1行ずつ改行して読み込みたい
2007年03月05日(月) 22時00分
otn
>両御所とも、資源喰い過ぎ。

awkで1行ずつ処理するスクリプトを書いていたら、perlでファイル全体を一気に配列変数に読み込むスクリプトにショックを受けて以来、自分ではあまり書かないもののファイル一気読みに抵抗はなくなりました。

>最初に行数をカウントして、

find /n で行番号をつけて各ファイルの○行目を1から順に取り出す方法もありますね。
CPUは食うけど。
1696.
Re:2ファイルから1行ずつ改行して読み込みたい
2007年03月05日(月) 22時40分
*
>find /n で行番号をつけて各ファイルの○行目を1から順に取り出す方法もありますね。

そのやり方で2ファイル読めます?

find /cでカウントしてfor/lでループして
set/p ファイル1側
set/p ファイル2側
で読み取りますが、
ここでリダイレクションを駆使する必要があります。

1698.
Re:2ファイルから1行ずつ改行して読み込みたい
2007年03月06日(火) 11時33分
otn
>>find /n で行番号をつけて各ファイルの○行目を1から順に取り出す方法もありますね。
>
>そのやり方で2ファイル読めます?

・ファイルから N 行目を取り出す。

for /f "delims=] tokens=1*" %%A in ('find /n /v "" ^< file.txt ^| findstr /b /l
"[%N%]"') do set LINE=%%B

これをNを数えながら両ファイルに対して行う。書いたとおり、CPUは食います。ディスクIOも。
1699.
Re:2ファイルから1行ずつ改行して読み込みたい
2007年03月06日(火) 11時39分
otn
>set/p ファイル1側
>set/p ファイル2側
>で読み取りますが、
>ここでリダイレクションを駆使する必要があります。

なるほど。
以前、set /p でファイルから読ませた場合、キーボードからの ctrl-C が効かなくなるという問題に出くわしましたが、工夫すれば大丈夫ですね。
これで、set /p の応用範囲が広がりました。

1700.
Re:2ファイルから1行ずつ改行して読み込みたい
2007年03月08日(木) 12時31分
*
>for /f "delims=] tokens=1*" %%A in ('find /n /v "" ^< file.txt ^| findstr /b /l
>"[%N%]"') do set LINE=%%B
>
>これをNを数えながら両ファイルに対して行う。書いたとおり、CPUは食います。ディスクIOも。

これは、性能がNの2乗のオーダになってまずい。

2ファイルをfind /n /v ""したものを合わせてソートしたらと考えましたが、
sortが文字順で数順にならないのと、安定でないので、駄目でした。
 

1689.2ファイルから1行ずつ改行して読み込みたい XYZ 07/03/04(日) 22:11
1690.Re:2ファイルから1行ずつ改行して読み込みたい otn 07/03/05(月) 10:20
1691.Re:2ファイルから1行ずつ改行して読み込みたい YanaKen◆c0rnJ1Q= 07/03/05(月) 12:56
1692.Re:2ファイルから1行ずつ改行して読み込みたい * 07/03/05(月) 15:34
1694.Re:2ファイルから1行ずつ改行して読み込みたい otn 07/03/05(月) 22:00
1696.Re:2ファイルから1行ずつ改行して読み込みたい * 07/03/05(月) 22:40
1698.Re:2ファイルから1行ずつ改行して読み込みたい otn 07/03/06(火) 11:33
1700.Re:2ファイルから1行ずつ改行して読み込みたい * 07/03/08(木) 12:31
1699.Re:2ファイルから1行ずつ改行して読み込みたい otn 07/03/06(火) 11:39
 
 


カテゴリー「SET, PATH, %環境変数%」索引へ
カテゴリー「文字列の操作」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2007年03月04日 13:25に投稿されたエントリーのページです。

ひとつ前の投稿は「特定のアプリの保存先を検索してファイルを削除したい」です。

次の投稿は「フォルダを削除するコマンド」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
 
このブログについて | 運営:有限会社メディアポート