【困っています】Pukiwikiの各ページの内容を一括変換する方法について。

特定のページ(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/イントラネットで稼動

よろしくお願いします。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2006/10/28 22:45:57
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:k12u No.3

回答回数80ベストアンサー獲得回数7

ポイント60pt

実験してみました.

あるフォルダに

以下のようにファイルを作りました。

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

となりました。こんな感じでいかがでしょうか。

動作が意図していないものである可能性もありますから必ず実行する前にバックアップはとってください。このスクリプトはバックアップはとりません。

id:Penpen

ありがとうございます。

説明を読む限りではこちらが意図している動作です^^

ちょっと今は時間が取れないので、今夜にでも試してみますね。


#2番目の回答の件は気にしないで下さいね。

#怪しいところは指摘してもらえた方がありがたいので^^


-----

当方でも実験してみましたが、希望どおりの結果となりました!

  • 全ファイル、文字コードはEUC-JPで作成しました。
  • 上書きする1行目中に「'」や「#」などが含まれていても問題ないようです(プログラムにとって特殊な文字があることをすっかり忘れていました…あぶないあぶない)

本当にありがとうございます。

2006/10/28 22:37:23

その他の回答2件)

id:miyamuyuki No.1

回答回数40ベストアンサー獲得回数0

ポイント10pt

単純作業ですが、フリーソフトは無いと思います。

EXCEL の VBA でも組めると思いますが、事前調査など必要だと思います。

私は Linux 環境でPukiwikiを実行していますが、wiki/ 以下にあるテキストは EUC で LF です。

Windows 環境でも同一か分かりません。

いろいろ確認が取れた後、恐らく1時間か2時間くらいで組めると思いますが、それなりに大変ですね。

テキストファイル名に日本語のものがあるとさらに大変そうです。

どなたか、詳しい方に変換プログラムを組んでもらうのが良いかと思います。

id:Penpen

回答ありがとうございます。


やはりVBAで組むしかありませんか…

最終的に手段が見つからなければ頑張ってみますね。

(業務で使用しているwikiなので、社外の方に詳細な情報を見せるわけにもいかず…うーむ)


余談ですが、

>wiki/ 以下にあるテキストは EUC で LF です。

これはWindows版でも同じですね。

文字コードと改行コードを変換するフリーソフトがあるのでOK!

http://www.kashim.com/kanjitranslator/


>テキストファイル名に日本語のものがあるとさらに大変そうです。

Wikiソースのファイル名はPukiwikiの標準機能で調べられるので([一覧]→[ファイル名一覧])、こちらも問題なさそうです。

2006/10/24 22:38:39
id:k12u No.2

回答回数80ベストアンサー獲得回数7

ポイント10pt

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;

のような(!まだ不正確なのでこの段階では間違っても実行しないでください!)コードで

それに近いことがごく簡単にできると思いますが,なんか,データファイルの仕様がおかしくありませんか?数字が対応していません.

id:Penpen

回答ありがとうございます。

>なんか,データファイルの仕様がおかしくありませんか?数字が対応していません.

「303031.txt,弦楽器」の件でしょうか? これで間違いないと思うのですが…

参考:http://f.hatena.ne.jp/Penpen/20061026093420

別件でしたら教えてください。


Perlのことは全然わかりませんが、提示くださったソースはそんなに難しい内容ではないと思うので頑張って読んでみます。…最新版のActivePerlをインストールしたら動きますよね?

…と思っていたのですが、いきなりモジュールとやらにぶつかりました;どうやって扱えばいいのか全くわからず思案中…(@_@)

Tie::Fileって標準で入っているモジュールなんですね。「5.8以降」という制限はそういう意図でしたか(^^;

2006/10/28 22:33:12
id:k12u No.3

回答回数80ベストアンサー獲得回数7ここでベストアンサー

ポイント60pt

実験してみました.

あるフォルダに

以下のようにファイルを作りました。

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

となりました。こんな感じでいかがでしょうか。

動作が意図していないものである可能性もありますから必ず実行する前にバックアップはとってください。このスクリプトはバックアップはとりません。

id:Penpen

ありがとうございます。

説明を読む限りではこちらが意図している動作です^^

ちょっと今は時間が取れないので、今夜にでも試してみますね。


#2番目の回答の件は気にしないで下さいね。

#怪しいところは指摘してもらえた方がありがたいので^^


-----

当方でも実験してみましたが、希望どおりの結果となりました!

  • 全ファイル、文字コードはEUC-JPで作成しました。
  • 上書きする1行目中に「'」や「#」などが含まれていても問題ないようです(プログラムにとって特殊な文字があることをすっかり忘れていました…あぶないあぶない)

本当にありがとうございます。

2006/10/28 22:37:23
  • id:k12u
    ActivePerlでしたらplファイルをダブルクリックで動くと思います。
    (perl script.plではなくて)
    文字コードはEUC-JPに変換しておくのが安全かもしれません。

    ※PukiWikiを使わなくなって久しいもので,
    回答2で見当違いのつっこみを入れてしまって済みません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません