人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

「A文字列」〜「B文字列」の間に「X文字列」が無いファイルを検出させて、「A文字列」の直後に「X文字列」を追加させたい

手元には、「TextSS」というソフトがありますが、このソフトでは不可能みたいなので、可能なソフトと方法を教えてください
できれば、使用する特殊記号の意味も説明していただけると、ありがたいです
(こういう動作だから今回はこうなる、というような説明)

●質問者: watson
●カテゴリ:コンピュータ
✍キーワード:ソフト ファイル 文字列 特殊記号
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● jouno
●100ポイント

http://rubyforge.org/frs/?group_id=167

RubyForge: One-Click Ruby Installer: Project Filelist

rubyをインストールして、以下をtrans.rbのファイルにして(なお”を半角に戻してください)newというフォルダをつくっておいて、beforeをA文字列afterをB文字列、patternをX文字列に書き直し、

ruby trans.rb *.txt

のようにすればnewのなかに処理されたファイルができているはずです。

----------------------

#!//usr/local/bin/ruby --


BEFORE=”before”

AFTER=”after”

PATTERN=”patern”


ARGV.each{|file|

str = File.read(file)

str.gsub!(/(#{BEFORE})(.*)(#{AFTER})/){|s|

s2 = $1 + PATTERN + $2 + $3

$2.match(/#{PATTERN}/) ? s : s2

}

File.open(”new/”+file,”w”){|fh|

fh.print str

}

}

-------------------

何をやっているのかは、簡単に言うとまず、AとBの文字列の間に何かの文字列、という並びを検索し、それから、その挟まれている文字列にX文字列が含まれているかどうかを検査しています。


この二段階が必要なので、普通の検索や正規表現ではたぶん無理です。(もしかしたら正規表現だけで再帰を利用すれば可能かもしれませんがたぶん無理だと思います)

http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=%C0%B5%B...

Rubyリファレンスマニュアル - 正規表現

正規表現については

http://www.tohoho-web.com/wwwperl1.htm#Expr

とほほのperl入門(概要編)

こちらもどうぞ。

http://search.vector.co.jp/search?query=%90%B3%8BK%95%5C%8C%BB&a...

Download /win/util/text/

もうちょっと簡単なやり方を考えてみたのですが、ちょっと思いつきません。「何々が含まれない」というのはちょっと処理が面倒なのです。ここのソフトのdevasなどは今回の用途には使えませんが、かなり強力です。

http://www.vector.co.jp/soft/win95/util/se162621.html

Devas(Windows95/98/Me / ユーティリティ)

ただし、ちょっと条件がはっきりしないのですが、

A文字列とX文字列の間にはほかの文字列は入るのでしょうか。もしもA文字列X文字列B文字列が隙間なく並んでいて、X文字列があったりなかったりする、そして、それ以外のパターンのファイルはない、というのなら、話はかなり簡単になります。

A文字列B文字列をA文字列X文字列B文字列に置換すればいいだけなので、たとえばdevasで

オプションを正規表現検索で行単位で検索にしておいて、

(A文字列)(B文字列)

で検索して

¥1X文字列¥2

に置換すればいいです。

この際のぞみ通りになるかどうか、検索結果の確認でまず確認しておいてから実行してください。

意味は、¥1は最初の括弧、¥2は二番目の括弧です。だから結果としてA文字列X文字列B文字列になるわけです。


2 ● aki73ix
●100ポイント

http://nifberry.727.net/test/hatena159.lzh

変換の条件が良くわからないのですが作ってみました

汎用性は全然ありませんが(^^;


・A文字列かB文字列がない場合は処理しない

・最初に出てきたA文字列の後にあるB文字列だけを1回判定

・ファイルサイズには制限なし

・A文字列をヘッダ、Bをフッタとする

・A,B,Xの文字列は32kまで

・A,B,Xで特殊文字を使う場合はURLエンコード(例えば改行は%0d%0a)

・出力先フォルダは同じフォルダは指定できない

・大文字小文字の区別は決めれられる


とりあえず問題があれば、後一回回答できるのでコメントしてもらえれば直します


3 ● oldroot
●50ポイント

http://www.microsoft.com/technet/prodtechnol/windowsserver2003/j...

Setlocal

ファイル名の話をしているのですよね。

Windows なら以下のようなバッチファイルではどうでしょうか。


setlocal enabledelayedexpansion

for /f ”tokens=*” %%A in (’dir /b AAA*BBB ^| findstr /v /r AAA.*XXX.*BBB’) do (

set f=%%A

ren ”!f!” ”!f:AAA=AAAXXX!”

)

endlocal


UNIX 系で bash が使えるのなら

#!/bin/bash


/bin/ls AAA*BBB | grep -v ’AAA.*XXX.*BBB’ | ( while read file

do

mv ”$file” ”${file/AAA/AAAXXX}”

done )


特殊記号の意味は、すみません、たくさんありすぎて説明できません。

◎質問者からの返答

操作を誤ったみたいで、と言うか初めての質問で要領を得なくて、1・2番の回答に返事できなくなりました。 なので、ここで返事させてもらいます。

***** 1.jounoさん *****

> 何々が含まれない」というのはちょっと処理が面倒なのです。…

やはりそうでしたか。 在るものを検出するのは簡単でも、無いものを検出するのは…というのは何となく解ってました。 どの正規表現を見ても、「含まれない」という表現はたぶん無いですよね。 なので、「含まれる」ファイルから削除させて、全ファイルに追加する、という2段階の方法で対処してました。 でも、「含まれる」を検出できるなら「含まれない」も…という妄想に駆られまして、質問してみました。

> もしもA文字列X文字列B文字列が隙間なく並んでいて…

そうなんですよ、それなら話しが簡単ですけどね。 しかも、他の文字列のパターンが一定ではないのです。 一定だったら、AまたはB文字列に含めることができますよね。 HTMLファイルなので良く似ているけど…ってとこです。

ところで、プログラムを作っていただいて、本当にありがとうございます。 Rubyを入れるなら、その前にパソコン内の環境を整えたい(そろそろ初期化を)と思っているので、まだ入れてないですが、ぜひ試してみたいと思ってます。 ありがとうございました。 m( _”_ )m

***** 2.aki1731xさん *****

プログラムを作っていただいて、ありがとうございます。 検証したところ、ファイルの末尾に何か追加されてしまいます。 一定ではないので、この下にいくつか提示します。

Lァ?

ワ・

¥,ロ・

H簗

Shift-JISではないみたいです。ひょっとしてバイナリコード? 末尾は</HTML>が多いですが、それ以外のファイルにも追加されてました。

この追加と変換以外は、改変されていない(文字列比較ソフトで5つのファイルを確認済み)です。

それと、まだ以下を確認できてません。

・ 検索対象フォルダの直下とその直下層まで確認、つまり2階層まで確認しているが、それ以下も検索および変換されているか?

でも、これ↑↑↑は確認しなくても大丈夫ですよね。

・ 変換対象に同名ファイルがある場合は、変換したファイルの名前を変更するのか?フォルダを作成するのか?

index.htm(l)なんかは、たくさんあります。 今回の検証では変換後のindex.htmが1つだけだったので、まさか重複で上書きされて1つになった?…とか思いました。 この辺りが確認できてません。

で、重宝しそうで使い続けると思いますが、拡張子フィルターとか… 検索フォルダと変換で作成されるフォルダのディレクトリ構成が同じだといいナァとか… 厚かましい!!・・・スンマセン m( _”_ )m

***** 3.oldrootさん *****

気づかなかったけど、誤解させる文章ですよね。 なので、そういう質問をしたことにしてポイントを考えます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ