特定のページ(600ページ程度)の【1行目だけ】を任意の文字列に書き換えなければならなくなりました。
-1行目の文字列、書き換える文字列とも、内容は各ページごとに異なっており法則性はありません。
-各ページの1行目に何が書かれているかは把握できていません。
-[ページのファイル名],[書き換える内容] というデータは用意できます。
具体例をあげると、
*wiki
ページ名:001 ( http://hoge.jp/wiki/index.php?001 )
変換前の1行目:バイオリン
変換後の1行目:弦楽器
ページ名:002 ( http://hoge.jp/wiki/index.php?002 )
変換前の1行目:トランペット
変換後の1行目:金管楽器
*用意できるデータ
303031.txt,弦楽器
303032.txt,金管楽器
という感じです。
-./wiki/ 以下に各ページのWikiソースが保管されている ということは知っています。
-プログラムや正規表現はほとんどわかりませので、フリーソフト等で解決できると大変助かります。
-「Pukiwiki公式の質問箱に行けば?」という回答はご遠慮下さい。
環境:Win2k/IIS 5.0/PHP 4.4.1/PukiWiki 1.4.7/イントラネットで稼動
よろしくお願いします。
実験してみました.
あるフォルダに
以下のようにファイルを作りました。
alphabet.txt
a a b b c c d d e e
number.txt
1 1 2 2 3 3 4 4 5 5
datafile.txt
alphabet.txt,1 1 number.txt,a a
script.pl
use Tie::File; open FILE, 'datafile.txt'; while(defined ($_=<FILE>)){ ($file, $data) = split /,/; tie(@a, 'Tie::File', $file); $a[0] = $data; untie $file; } close FILE;
ここで
perl script.pl
としてscript.plを実行すると
alphabet.txt
1 1 b b c c d d e e
number.txt
a a 2 2 3 3 4 4 5 5
となりました。こんな感じでいかがでしょうか。
動作が意図していないものである可能性もありますから必ず実行する前にバックアップはとってください。このスクリプトはバックアップはとりません。
単純作業ですが、フリーソフトは無いと思います。
EXCEL の VBA でも組めると思いますが、事前調査など必要だと思います。
私は Linux 環境でPukiwikiを実行していますが、wiki/ 以下にあるテキストは EUC で LF です。
Windows 環境でも同一か分かりません。
いろいろ確認が取れた後、恐らく1時間か2時間くらいで組めると思いますが、それなりに大変ですね。
テキストファイル名に日本語のものがあるとさらに大変そうです。
どなたか、詳しい方に変換プログラムを組んでもらうのが良いかと思います。
回答ありがとうございます。
やはりVBAで組むしかありませんか…
最終的に手段が見つからなければ頑張ってみますね。
(業務で使用しているwikiなので、社外の方に詳細な情報を見せるわけにもいかず…うーむ)
余談ですが、
>wiki/ 以下にあるテキストは EUC で LF です。
これはWindows版でも同じですね。
文字コードと改行コードを変換するフリーソフトがあるのでOK!
http://www.kashim.com/kanjitranslator/
>テキストファイル名に日本語のものがあるとさらに大変そうです。
Wikiソースのファイル名はPukiwikiの標準機能で調べられるので([一覧]→[ファイル名一覧])、こちらも問題なさそうです。
5.8移行のPerlが利用できれば
open FILE, 'datafile.txt';
while(defined $_=<FILE>){
($file, $data) = split /,/;
tie(@a, 'Tie::File', $file);
$a[0] = $data;
untie $file;
}
close FILE;
のような(!まだ不正確なのでこの段階では間違っても実行しないでください!)コードで
それに近いことがごく簡単にできると思いますが,なんか,データファイルの仕様がおかしくありませんか?数字が対応していません.
回答ありがとうございます。
>なんか,データファイルの仕様がおかしくありませんか?数字が対応していません.
「303031.txt,弦楽器」の件でしょうか? これで間違いないと思うのですが…
参考:http://f.hatena.ne.jp/Penpen/20061026093420
別件でしたら教えてください。
Perlのことは全然わかりませんが、提示くださったソースはそんなに難しい内容ではないと思うので頑張って読んでみます。…最新版のActivePerlをインストールしたら動きますよね?
…と思っていたのですが、いきなりモジュールとやらにぶつかりました;どうやって扱えばいいのか全くわからず思案中…(@_@)
Tie::Fileって標準で入っているモジュールなんですね。「5.8以降」という制限はそういう意図でしたか(^^;
実験してみました.
あるフォルダに
以下のようにファイルを作りました。
alphabet.txt
a a b b c c d d e e
number.txt
1 1 2 2 3 3 4 4 5 5
datafile.txt
alphabet.txt,1 1 number.txt,a a
script.pl
use Tie::File; open FILE, 'datafile.txt'; while(defined ($_=<FILE>)){ ($file, $data) = split /,/; tie(@a, 'Tie::File', $file); $a[0] = $data; untie $file; } close FILE;
ここで
perl script.pl
としてscript.plを実行すると
alphabet.txt
1 1 b b c c d d e e
number.txt
a a 2 2 3 3 4 4 5 5
となりました。こんな感じでいかがでしょうか。
動作が意図していないものである可能性もありますから必ず実行する前にバックアップはとってください。このスクリプトはバックアップはとりません。
ありがとうございます。
説明を読む限りではこちらが意図している動作です^^
ちょっと今は時間が取れないので、今夜にでも試してみますね。
#2番目の回答の件は気にしないで下さいね。
#怪しいところは指摘してもらえた方がありがたいので^^
-----
当方でも実験してみましたが、希望どおりの結果となりました!
本当にありがとうございます。
ありがとうございます。
説明を読む限りではこちらが意図している動作です^^
ちょっと今は時間が取れないので、今夜にでも試してみますね。
#2番目の回答の件は気にしないで下さいね。
#怪しいところは指摘してもらえた方がありがたいので^^
-----
当方でも実験してみましたが、希望どおりの結果となりました!
本当にありがとうございます。