[pgsql-jp: 33640] Re: EOF の問題について

もり mmmd6 @ yahoo.co.jp
2004年 7月 13日 (火) 13:04:30 JST


もりです。

  無事解決してなによりです。
  いくつか気になった点を。

・EOF(End of File)について
  後藤さんもおっしゃっていましたが、UNIX系のOSにEOFは存在しません。
  最終行をEOFとおっしゃっていましたが、最終行とEOFは違います。

> g4almi:/Users/shared/id1 ninomiya$ emacs id1promtfse3nkf.txt
> 変換をemacsで確認;

・このemacsで確認というのが気になります。
  emacsは、特殊文字コードの確認には向いていないと思います。
  emacsは、エディタというより環境に近いですから、設定次第ではどのよう
な動作も行えてしまいますので、普通にless等で確認されてはいかがでしょう?
  less id1promtfse3nkf.txt のように。
  8進や16進コードとして見る場合は、odを使って見て下さい。
  環境やコードによっては、lessでも不適当な場合もあるかと思います。

  参考のため、Redhat 9のemacsでCRのみを改行コードとしたファイルを見て
みましたが、改行として扱われていました。しかしMiracle LINUXでは、emacs
でも^Mと表現されてます。
  emacsのバージョンの違いか、glibc等の違いか、termcap等の違いかは分か
りませんが、できるだけ環境依存の影響を受けにくいツールで確認した方が
良いかと思います。
  xemacs, gnome-terminalでのemacs -nw, ktermでのemacs -nw、putty上での
emacs表示でもRedhat 9では改行に見えています。
  上記に限らず、確認を行われる際には、確認を行うツールが適切かどうかを
考える必要があるかと思います。

> 最後の行の改行には特に変換前と後で見た目には違いはない。また、¥nは見当たらな
> い。この改行は以前のemacsでの手入力したものとは異なっているコードと思われる
> (emacsで改行や最後の行に¥n入れてもエラーになる;後述の参考情報04.7.13を参照)

  LFは、\nではありません。
  混乱されているようですが、\nはあくまで2文字の\nにしかすぎません。
  PostgreSQLのSQL文中や、C, C++など各種の言語中やツール中の文字列の中
に\nが現れた場合、それぞれのツールや言語が\nをLFとして扱うだけです。
  従って、単純にファイル中にLFを入力したい場合は、UNIXでは改行を入れて
下さい。ファイル中に\nと記述しただけでは、LFにはなりません。
  HINT: Use "\n" to represent newline.
  を見て上記のように思われたのかもしれません。
  これは挿入する文字列データ中に改行を入れてデータベースに投入する際に
は\nを使うというヒントだけだと思います。
  つまり、
V$STAT1_03|10093|-|0.929|0.918|aAGAATca
  の最後のデータ中で、aAGAATca を aAGA\nATcaとした場合、データとして、
aAGA
ATca
  という2行にわたるデータとしてseqに入力されるということを言っているだ
けだと思います。
  つまり、\copyで使用するファイル中の改行は、行のデリミタとして扱われ、
データベースに投入するデータ中に改行を入れたい時には\nを使うという意味
だと思います。
  (私もPostgreSQLは初心者ですので、この辺の断定はできません)
  二宮さんの場合、実際のファイル中のLFコードとLFを表す\nとの違いを混同
して使われているように思います。

> Emacsで改行や最後の行末に¥nを手で入力したid1promtfse3.txtを使用しても下記の
> ように受け付けてくれなかった。しかし上記のNKFやcat id1promtfse3.txt | tr
> '¥r' '¥n' > id1promtfse3return.txtで施行した結果として改行もしくは、最後の行
> 末¥nが入っていても受け付けてくれた。Emacsでみると見た目には変換前と後では差
> がなかった。

  emacsで\nと書くのは、ただ\nという文字を書いただけです。
  tr で\nと指定したのは、\nという2文字ではなく、LFを表すエスケープ文字
として\nと記述しています。
  文字コードとしてみたら一目瞭然ですね。
  emacs中の\n  → 5C6E(16進表記)
  trで扱う\n   → 0A(16進表記)
  です。


__________________________________________________
Do You Yahoo!?
http://bb.yahoo.co.jp/




pgsql-jp メーリングリストの案内