このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

htmlファイル中の大文字小文字変換

発言者:柾木 博行
( Date Tuesday, December 17, 1996 03:53:19 )


田中先生、そしてみなさん、こんばんわ。

今ちょっと困っているのが、htmlファイルの中に書いてある文字の中で、大文字の
部分を自動で小文字に変換してくれるツールを探しています。
もちろん、MacのWeb Serverでは問題ないのですが、UNIXサーバーにもデータを
置くことがあって、このとき大文字はエラーを起こしてしまいます。
最初から全部小文字で書けばいいのですが、実は、Now softwareのInternet 
Now Up to Dateを使ってみようとしているのですが、あのソフトは画像ファイル
やディレクトリ名に一部大文字を使っていて、設定ファイルをいじっても、html
ファイルの中に大文字で表記される部分がかなりあります。
エディターなどを使ってマクロで処理させるのも考えたのですが、とにかく300
近くものファイルが自動生成されるもので、どうしても途中で爆弾に見舞われて
しまいます。テキストファイル中の大文字(もちろん半角英数字)を小文字に自動で
一括変換(ドラッグ&ドロップできればベスト)してくれるツールを、どなたか
ご存じありませんでしょうか?


P.S.このページつながるまでにぱらぱら見てたMacPeopleに田中先生のミニインタ
ビューが載ってましたs。

usui , seiichi さんからのコメント
( Tuesday, December 17, 1996 08:18:26 )

私の未熟なMacPerlのスクリプトでやってみました。
注文通りの品じゃないかもしれません。
以下のソースをMacPerlでdropletにセーブすれば、
ドラッグ&ドロップで大文字を小文字に変換します。

#dropletは初めて作ったので、変なソースになってしまいました。

foreach $file(@ARGV){
  print "$file \n";

  open (IN,"<$file");
  @alphabet=();

  while (<IN>){
  tr/A-Z/a-z/;
  push(@alphabet,$_);
  }
  close(IN);

  open (OUT,">$file");
  print OUT @alphabet;
  close(OUT);
}
print "ok\n";

usui,seiichi (赤面) さんからのコメント
( Tuesday, December 17, 1996 08:22:38 )

しくじりました。

漢字まで変換されてしまいます。
テスト不足でした。
申し訳ございません。

こにし さんからのコメント
( Tuesday, December 17, 1996 08:34:31 )

どこにあったか忘れましたが、Mac用のSedがありまして、
それを使えばできるはずです。
大文字を小文字に変換するだけですよねぇ。

でも、usuiさんのperlスクリプトでも
jperlであればうまくいくんじゃないかなぁ。

こういった置換の場合、2バイト文字もちゃんと
1文字と数える処理系でやると楽です。

usui,seiichi (赤面) さんからのコメント
( Tuesday, December 17, 1996 08:46:21 )

EUCに変換してから、やったところうまくいったようですが、
Perl歴3カ月なので、自信ないです。
勉強不足でちゃんとできているかもわかりません。

こにしです。 さんからのコメント
( Tuesday, December 17, 1996 08:46:42 )

そういえば、漢字コードをEUCに変換してからすれば、
Usuiさんので、動くんじゃないかな?

たぶん。


こにし さんからのコメント
( Tuesday, December 17, 1996 08:48:45 )

あ、ほぼ、同時にコメントしてしまった。くぅ。

usui,seiichi (赤面) さんからのコメント
( Tuesday, December 17, 1996 08:58:12 )

こんな感じでいいですか?
jcode.plはここにあったと思います。
ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/jcode.pl-2.0
jcode.pl-2.0→jcode.plにして、マックで読めるようにして、
MacPerlのlibフォルダーに入れます。

#!/usr/local/bin/perl
require 'jcode.pl';

foreach $file(@ARGV){

    open (IN,"<$file");
    @small=();

    while ($capital = <IN>){
    jcode::convert(*capital,'euc');
    $capital =~ tr/A-Z/a-z/;
    jcode::convert(*capital,'sjis');
    push(@small,$capital);
    }
    close(IN);

    open (OUT,">$file.a");
    print OUT @small;
    close(OUT);
}

usui,seiichi(赤面) さんからのコメント
( Tuesday, December 17, 1996 09:00:32 )

こにしさん、フォロー有り難うございました。



柾木 博行 さんからのコメント
( Tuesday, December 17, 1996 12:29:13 )

usui,seiichiさん、そして皆さんありがとうございます。
特にusuiさんにはわざわざスクリプトを書いていただいてすみません。

でも、試してみたのですがうまくいきません。
MacPerlのREADMEをドロップしてみましたが、次のようなエラーが出てしまい変換されませんでした。

# syntax error, next 2 tokens "jcode::"
File 'RAM ディスク:textconvert'; Line 10
# syntax error, next 2 tokens "jcode::"
File 'RAM ディスク:textconvert'; Line 12
# Execution of RAM ディスク:textconvert aborted due to compilation errors.

Pearについては全く勉強してないもので、果たして私の操作の問題か、スクリプト自体の
問題なのか、判断できません。どなたか説明していただけないでしょうか?
お手間を掛けさせて申し訳ありません

田中求之 さんからのコメント
( Tuesday, December 17, 1996 14:29:12 )

こういう処理は Perl が強いよねぇ、と言いながら AppleScript にだって意地が
ある(笑)

以下のスクリプトで、すべてのアルファベットが小文字に変換されます。
(Tanaka's osax 使用)

ただし、メモリーをたくさん必要とするのと、処理が遅いです

set df to choose file
set myData to readFromFile df
set myData to SjisToEuc myData
set myList to characters of myData
repeat with x in myList
  set dy to ASCII number (contents of x)
  if dy ウ 65 and dy イ 90 then
    set contents of x to ASCII character (dy + 32)
  end if
end repeat
set AppleScript's text item delimiters to {""}
set myData to myList as string
set myData to EucToSjis myData
set df to new file
writeToFile myData to df

田中求之 さんからのコメント
( Tuesday, December 17, 1996 14:33:47 )

300近いファイルというということですから、AppleScript では使いものに
なりませんね。

やはり、日本語に対応した sed (NIFTY_Serve の FMACPRO にありますが、
Internet では手には入ったかな?)を使って、だぁ〜〜と処理してしまうのが
いいのではないでしょうか?


>P.S.このページつながるまでにぱらぱら見てたMacPeopleに田中先生のミニインタ
>ビューが載ってましたs。

ばれたか(笑) って、別に悪いことはしてないですけど (^_^;

田中求之 さんからのコメント
( Tuesday, December 17, 1996 14:43:19 )

関係ないですけど、

「このページつながるまでに」

とのことですが、アクセスの状況からすると、昼の12〜1時であればマジで
混んで遅くなってます。最大同時アクセスのピークは、かならずこの時間帯に出ます。

それ以外の場合は、DNS サーバーの逆引き用の設定がおかしいサイトからの
アクセスがあった場合に、そのアクセスの逆引き処理(ホスト名確認)
のためにサーバーが10秒以上凍り付いたようになってしまいます。
こればっかりは、こちらで対処することはできない(セキュリティの
ために必ず DNS によるホスト名確認を行っていますので)ので
仕方がありません。

柾木 博行 さんからのコメント
( Tuesday, December 17, 1996 19:57:13 )

皆さんにスクリプトを書いていただき、ありがとうございました。
田中先生のおっしゃるようにアップルスクリプトでは300以上もあるファイルの処理は
厳しそうなので、とりあえずニフティーからSedMac 1.0.1をダウンロードして、何とか
使えました。これなら処理もそこそこですし、うまくいきそうです。
皆さんをお騒がせして、大変失礼しました。

usui,seiichi さんからのコメント
( Tuesday, December 17, 1996 23:20:08 )

寝てました。(不良学生なんです。)
フォロー送れました。すみません。

jcode.plが原因のようです。
jcode.pl-2.0 は改行コードがLFなのでそれを変換して使います。
僕は、Jeditで変換しています。

それから、
   open (OUT,">$file.a");
を、
   open (OUT,">$file");
にしてください。テスト用のソースを載せてしまいました。

#AppleScriptでも作ろうとしたのですが、やっぱり、勉強不足で無理でした。
#早速、田中先生のソースで勉強させて貰います。