作者: 藤岡和夫
日時: 2003/7/29(20:16)
藤岡です。

Tclはプラットフォームに依存した行末文字を検出して、読み込んだときには内
部的にUNIXの形式に変換します。それを書き出すときにそのプラットフォーム独
自の行末文字に変換して出力します。

従って、

puts -nonewline $out [read $in]

のような感じで、入力して出力するだけで、行末文字をそのプラットフォームの
ものに統一できます。

と、ウェルチの「Tcl/Tk入門 第2版」の120ページには書いてあります(^^;)この
本はお勧めです。

On Mon, 28 Jul 2003 21:57:41 +0900
Ito Takahiro <taka@...> さんwrote:

> 伊藤です。
> 
> 藤岡さん、ありがとうございます。
> もっと問題を具体的に書くべきでしたが、
> 
> >while {[gets $fd line] >= 0} {
> >で読み込めば改行は削除して読み込むはずですが・・・
> 
> とのことで、gets はコントロールコードの手前まで読み込むのか
> なと思い、全く違う方法ですが問題が解決できました。
> 
> そもそも問題というのは、
> ・UNIXサーバに複数(1000以上)のテキストファイルがある
> ・そのファイルは不特定多数よりFTPでWindowsからアップロード
>   される
> ・アップロードの際、バイナリモード、アスキーモード何でもあり
> 
> このファイル達を全てローカルのPCにダウンロードし、Tclで書い
> たフィルタを通して、再びアップロードする・・・・・
> という事をしたかったのです。
> その際、アスキーモードでダウンロードすると、バイナリでアップ
> ロードされたファイルは、行の末尾に余計なコントロールコードが
> あったため、そのコントロールコードを削除したかったのですが、
> regsubではうまく動きませんでした。
> (通常の改行は改行として出力したかった)
> ここで、藤岡さんのヒントがもらえたので、全てのファイルをバイ
> ナリ-モードでダウンロードし、フィルタをかけたところ、問題な
> く動作しました。
> Windowsのテキストエディタでは、改行となっていなくても(LFの
> み)、Tclの gets で1行として読む事ができました。
> 
> おさがわせしました。
> 
> ## なんか状況がうまく説明できない・・・ m(__)m
> 
> 
> -- 
> 伊藤 孝浩
> mailto:taka@...

藤岡 和夫
FGALTS@...
kazuf@...
TS Networkのために http://homepage1.nifty.com/kazuf/