お酒好きのおしりトラブル対策とは

キャリッジリターン(CR+LF)とラインフィード(LF)の違いについて良く分かりません。
Windowsの場合、改行(Enter)はキャリッジリターン(CR+LF)となるとのことですが、キャリッジリターン(CR+LF)の使用されたコードをUnix系サーバ(改行がLF)へ転送するとちゃんと動かないと聞きます。

質問1:
そこで、分からないのがWindowsXPにインストールされたテキストエディタ(TeraPad)やDreamweaver(MX2004)で作成したPHPコードの中の改行は、やはりラインフィード(LF)ではなく、キャリッジリターン(CR+LF)となってしまっているのでしょうか?

質問2:
実際にPHPコードの中の改行がラインフィード(LF)になっているか又はキャリッジリターン(CR+LF)になっているかは、どのように見分けるのでしょうか?

質問3:
PHPコードの中の改行がキャリッジリターン(CR+LF)になっている場合、それをそのままLinux系のサーバ(FreeBSD)にアップロード(つまり、バイナリモードでアップロード)すると、やはりそのプログラムはちゃんと動かないのでしょうか?

質問4:
PHPコードの中のキャリッジリターン(CR+LF)を、コードを崩さずに、一気にラインフィード(LF)に返還する方法は、ありますか?

注意:
このスレッドでは、ラインフィード(LF)やキャリッジリターン(CR+LF)など、異なる改行コードが異なるOSで使われ初めた理由や経緯をお聞きしているのではありません。プリンター関連の質問では、ないと言うことです。

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

> 質問1:


> Dreamweaver又はTeraPad等でホームページ用のPHPプログラムやHTMLファイルを作成する場合は、
> 通常、上記の「改行コードの指定」を予めLFに設定しておくものなのでしょうか?
LFでないとだめなら私はそうしますけど。
機能として存在するんだから使わない理由はないでしょう。

> 質問2:
> また、現在のPHPプログラム内の改行が、改行復帰(CR+LF)になっているか
> 又はラインフィード(LF)になっているかはどのようにしてわかるのでしょうか
TeraPadならステータスバーに表示されます。
ほかのエディタでもステータスバーに表示されていることが多いです。

エディタによっては改行コードの種類によって
改行マークの形が変わるものもあります。
(Peggyはこのタイプ。)

> 質問3:
> PHPコードの中のキャリッジリターン(CR+LF)を、コードを崩さずに、一気にラインフィード(LF)に返還する方法は、ありますか?
1つのファイルを処理できればよいなら、
エディタでファイルを開いた後、改行コードを指定して保存するだけです。
ほとんどのエディタでこれでできる。

TeraPadにはメニューに「文字/改行コード指定保存」をいうわかりやすい項目があるし、
Peggyなら「名前をつけて保存する」ときに改行コードを選択できます。
試してみればすぐ分かることなのでとりあえずやってみてください。


もし複数ファイルを一気に処理したいなら、
そういうことができる一括置換ソフトを使った方がよいでしょう。

この回答への補足

Wernerさん
ご回答、ありがとうございました。

上記の件、了解しました。

補足日時:2008/08/13 02:19
    • good
    • 0
この回答へのお礼

Wernerさん

>LFでないとだめなら私はそうしますけど。
ここが、一番のポイントだと思います。Linux系のサーバは改行復帰(CR+LF)は使用せず、ラインフィード(LF)ですが、ローカルのWindowsXPでPHPプログラムの開発段階から改行復帰(CR+LF)を使用せず、ラインフィード(LF)にしておいたほうが良いのでしょうか?または、WindowsXPでPHPプログラムを開発する段階では、改行復帰(CR+LF)とし、サーバへの転送時にアスキーモードでラインフィード(LF)に返還するのが主流なのでしょうか?

>もし複数ファイルを一気に処理したいなら、
>そういうことができる一括置換ソフトを使った方がよいでしょう。
なにか一括置換ソフトをご存知でしたら、名前をお教え願えますか?

上記以外は、了解しました。

お礼日時:2008/08/13 02:45

PHPやHTMLの場合は改行コードは気にしなくてもいいでしょう


CR+LFのままでもLinux上でPHP動きますから
CGI-Perlの場合は動かないので改行コードを変更しないといけませんがFTPソフトの変換機能(アスキーモード)で十分。
    • good
    • 0
この回答へのお礼

php504さん
ご回答、ありがとうございました。

上記の件、了解しました。

お礼日時:2008/08/14 12:15

更に質問を追加されていらっしゃいますが…私は質問者様が「Dreamweaverでは改行コードをLFにできない」という勘違いをされてらっしゃる点についてのみ、指摘させて頂いただけです。


質問1-3はいずれもキーワードが具体的になっておりますから、Dreamweaverのヘルプ・ファイルを見るなり、ググるなりでいくらでも調べられ(対処法が見つかる)ます。
質問者様は今迄の膨大な質問履歴から察するに同業者(プロ)の方とお見受けしておりますので、ここから先はご自分でお願い致します。いずれの質問もプロが第三者に助けを求める様なレベルのものではないと思いますので(と言ってもまあ、ANo.4様が詳細に回答されてしまってらっしゃるので質問者様はそれで済ませられてしまうかもしれませんけれど…)。

この回答への補足

abrilさん
ご意見、ありがとうございました。

補足日時:2008/08/13 02:20
    • good
    • 0

> 秀丸など改行コードをLFで保存できるエディタを使用せず、TeraPadやDreamweaverでphpプログラムを作成しておられる方は


TeraPadも改行コードを指定して保存できます。
文字/改行コード指定保存という項目がちゃんとあるし、オプションでデフォルトの改行コードの指定もできる。

私が知ってる限りでは改行コードを指定できないエディタの方が珍しいです。

この回答への補足

Wernerさん
ご回答、ありがとうございました。

質問1:
>TeraPadも改行コードを指定して保存できます
Dreamweaver又はTeraPad等でホームページ用のPHPプログラムやHTMLファイルを作成する場合は、通常、上記の「改行コードの指定」を予めLFに設定しておくものなのでしょうか?

質問2:
また、現在のPHPプログラム内の改行が、改行復帰(CR+LF)になっているか又はラインフィード(LF)になっているかはどのようにしてわかるのでしょうか(できれば、Linux等リモート側でなく、DreamweaverやTeraPad等ローカルのコンピュータで)?

質問3:
PHPコードの中のキャリッジリターン(CR+LF)を、コードを崩さずに、一気にラインフィード(LF)に返還する方法は、ありますか?
Dreamweaverの「改行タイプ」を”LF”にした後、”LF”ではなく”CR+LF”で既に保存されているPHPプログラムを読み込んで、再保存(名前をつけて保存)すれば、”CR+LF”が”LF”に返還されますかね?

または、Dreamweaver、TeraPad等(他にPeggyも使用可能)の検索・置換機能でキャリッジリターン(CR+LF)を、コードを崩さずに、一気にラインフィード(LF)に返還する方法があれば教えて下さい。

よろしくお願いします。

補足日時:2008/08/12 21:39
    • good
    • 0

> 秀丸など改行コードをLFで保存できるエディタを使用せず、TeraPadやDreamweaverでphpプログラムを作成



??Dreamweaverでも改行コードはLFにできますけど…?
[編集]-[環境設定]-[コードフォーマット]で、「改行タイプ」を”LF”にしておけば保存時にLFになりますが。
それとも質問者様のお求めになっているのは、そういう事ではないのでしょうか?

この回答への補足

abrilさん
ご回答、ありがとうございました。

質問1:
>??Dreamweaverでも改行コードはLFにできますけど…?
>[編集]-[環境設定]-[コードフォーマット]で、「改行タイプ」を”
>LF”にしておけば保存時にLFになりますが。
Dreamweaverでホームページ用のPHPプログラムやHTMLファイルを作成する場合は、通常、上記の「改行タイプ」をLFに設定しておくものなのでしょうか?

質問2:
また、現在のPHPプログラム内の改行が、改行復帰(CR+LF)になっているか又はラインフィード(LF)になっているかはどのようにしてわかるのでしょうか(できれば、Dreamweaverで)?

質問3:
PHPコードの中のキャリッジリターン(CR+LF)を、コードを崩さずに、一気にラインフィード(LF)に返還する方法は、ありますか?
Dreamweaverの「改行タイプ」を”LF”にした後、”LF”ではなく”CR+LF”で既に保存されているPHPプログラムを読み込んで、再保存(名前をつけて保存)すれば、”CR+LF”が”LF”に返還されますかね?

よろしくお願いします。

補足日時:2008/08/12 21:37
    • good
    • 0

キャリッジリターン(行頭復帰)はCRで、ラインフィード(改行)はLF。


改行復帰はCR+LF。別物です。

1.
保存方法による。が、おそらく改行復帰になっているでしょうね。秀丸などのエディタの一部で改行コードをLFで保存できる物もありますけど。

2.
バイナリエディタで開くか、前述の改行コードを指定できるエディタで開くか、Linux上で開くか。

3.
linuxの文字コードによる。とはいえ、まあ動かないでしょうね。

4.
FTPの際にアスキーモードで転送すればよいのでは?
もしくはnkfで変換するとか。
http://cns-guide.sfc.keio.ac.jp/2004/2/4/12.html
簡単なスクリプトを書くという手も。
http://d.hatena.ne.jp/himesuke/20080316/p1

この回答への補足

okg00さん
ご回答、ありがとうございました。

>保存方法による。が、おそらく改行復帰になっているでしょうね。
WindowsXPにインストールされたTeraPadやDreamweaverでPHPプログラムを作成した場合、どのような保存方法にすれば改行復帰(CR+LF)ではなくラインフィード(LF)で保存できるのでしょうか?

>秀丸などのエディタの一部で改行コードをLFで保存できる物もありま
>すけど。
>linuxの文字コードによる。とはいえ、まあ動かないでしょうね。
秀丸など改行コードをLFで保存できるエディタを使用せず、TeraPadやDreamweaverでphpプログラムを作成しておられる方は、Linux系のサーバ(FreeBSD)にファイルをアップロードする際、通常、FTPのアスキーモードでファイルを転送することによって、Windowsではラインフィード(LF)を入力できず改行復帰(CR+LF)となる問題に対処しておられるのでしょうか?

よろしくお願いします。

補足日時:2008/08/12 15:13
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qキャリッジリターンとラインフィードの違いは?

キャリッジリターンとラインフィードは似ていますが、どこが違うところはありますでしょうか。また、その特徴的など教えていただけると幸いです。

私の解釈としては「キャリッジリターンとラインフィードとも同じだが、OSによって異なっているため、キャリッジリターン(CR)とラインフィード(LF)を合わせて使うことを推奨する。WindowsはCR+LFで改行できるが、MacはCR、UnixはLFでないと改行されない」ということですが、皆様はどう思いますでしょうか。

Aベストアンサー

原則的には、CRは左マージン位置に戻ることでLFは1行下に移るこ
と。動作が全く違います。

とはいえ、CRする時には十中八九LFもしたい、でないと同じ行に重
ねて印字することになるってんで、CRだけでCR+LFの動作をするシン
プルなプリンタやタイプライタも存在しましたし、一度の命令で1行
全部を同時に印字するラインプリンタではCRという概念がなく、LF
のみで次の行の印字準備が整っていました。そこらへんの歴史的な
経緯で、シンプルなテキストファイルで改行を示すための機能文字
をどうするかが色々と分離していったんです。

> WindowsはCR+LFで改行できるが、MacはCR、
> UnixはLFでないと改行されない

CR+LFにはCRもLFも含まれていますから、改行にCR+LFを使ったテキ
ストはMacでもUNIXでも改行されます。行末や行頭に妙なコードが残
るだけ。DOSはCR+LF両方書かないと改行出来ないですね。

QChr(13)とChr(10)の違いは?

myStr = Replace(myStr, Chr(13), "")

myStr = Replace(myStr, Chr(10), "")

で、改行を置換しているのですが、どちらかでも改行できる時や
どちらかじゃないと改行できない時があります。

そもそもChr(13)とChr(10)の違いはなんでしょう?
どちらも改行ですよね?
何が違うのでしょう?

Aベストアンサー

こんにちは。お邪魔します。

Chr(10) ・・・ ラインフィード ・・・ 略して、Lf

Chr(13) ・・・ キャリッジリターン ・・・ 略して、Cr

改行文字に何を使うのかはアプリケーションが規定するものです。

Win・Office環境では
上のふたつを組合わせた改行[CrLf]を使うことが多いと思います。
次に[Lf]、そして、[Cr]

なので、ソースによっては
  myStr = Replace(myStr, vbCrLf, "")
と、一発で置換できるケースも少なくないです。
■ソースごとに改行文字を確認しておくことから始めた方が有利になります。■

ひとまず、VBAでの改行の扱いに慣れるには
■VBAで用意された文字列定数について知っておいた方がよいと思います。■
 VBE(Visual Basicの編集画面)が開いている状態で、
 F2 キー → オブジェクトブラウザー起動
 検索小窓に、vbCrLf、とタイプして、検索ボタン
 VBA.Constantsクラスのメンバーが表示され
 その中にすべての改行文字(文字列定数)が含まれています。
 そのまま、F1 キーでヘルプを表示します。
詳しい説明はヘルプを読む方がいいでしょう。

実践的な話として、
Chr(10)やChr(13)は関数の戻り値です。
対して、
vbLfやvbCr(またはvbCrLf)は定数です。
定数で済ませられるなら、定数の方が何かと有利です。
定数の名前は略号ですから、実態をイメージし易くなっています。
定数の扱いに慣れることをお奨めします。
例)
  myStr = Replace(myStr, vbLf, "")
  myStr = Replace(myStr, vbCr, "")
  myStr = Replace(myStr, vbCrLf, "")

もしも文字列定数を先に覚えていたなら、疑問にもならなかったのかも知れませんね。
私の場合は、改行の何たるかを覚える前に文字列定数覚えていて、困ることありませんでしたから。

以上、ご参考まで。

こんにちは。お邪魔します。

Chr(10) ・・・ ラインフィード ・・・ 略して、Lf

Chr(13) ・・・ キャリッジリターン ・・・ 略して、Cr

改行文字に何を使うのかはアプリケーションが規定するものです。

Win・Office環境では
上のふたつを組合わせた改行[CrLf]を使うことが多いと思います。
次に[Lf]、そして、[Cr]

なので、ソースによっては
  myStr = Replace(myStr, vbCrLf, "")
と、一発で置換できるケースも少なくないです。
■ソースごとに改行文字を確認しておくことから始めた方が有利...続きを読む

QVBAでの戻り値と引数について

最近VBAでプログラムを勉強しています。

引数と戻り値について教えてください。
定義としては、
引数:プロシージャに渡される定数、変数、および式。
戻り値:呼び出し元に処理の結果を戻す値。
となっているのですがいまいちピンときません。

SubプロシージャとFunctionプロシージャでその違いがあると思うのですが、具体的にどれが引数でどれが戻り値なのかわかりません。

他のプログラミングも全く経験がない初心者で初歩的な質問ですみませんがご教授お願いします。

Aベストアンサー

たとえとして、人に買い物を頼むことを考えると、
何を買ってきて欲しいかを書いたメモやお金を人に渡し、
その人は買い物をしてきて買ったものやお釣を受け取ります。

この場合、「メモ」や「お金」など「やってもらう仕事に関する情報」が引数で、
「買ったもの」や「お釣」などの「やってもらった仕事の結果」が戻り値にあたります。

買い物には公共料金の振込みのように、買い物の結果がないものもあります。
(ここでは領収書などは無視)
このような結果がないものがSubプロシージャで、結果を返すものがFunctionです。

QDoEvents関数って何?

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そこで「EXCEL VBA パーフェクトマスター」という本を見たら

for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
DoEvents
next i
unload userform1
と入力すれば解決することがわかりました。

しかし「DoEvents」についてあまり詳しく書いていなかったのでDoEvents関数をヘルプで見ると、
「発生したイベントがオペレーティング システムによって処理されるように、プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。」

と書いてあるのですが正直、書いてあることがよくわかりません。

どなたかDoEvents関数について、
もう少しわかりやすく教えていただけませんか。
それから、最初に書いたコードで実行すると
ユーザーフォームの背景が真っ白になってしまう原因も
教えていただけませんか?

よろしくお願いいたします。

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そ...続きを読む

Aベストアンサー

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
    DoEvents
    Cells(i,1) = ""
  Next i
End Sub

Private Sub CommandButton2_Click()
  MsgBox "hoge"
End Sub

っていうフォームのコードがあった場合、
DoEvents を入れることによって、ループ中にユーザーがCommandButton2 を押すことによって CommandButton2 のクリック イベントも動いちゃいます。
CommandButton1 のクリック イベントではループの前に
CommandButton1.Enabled = False
CommandButton2.Enabled = False
を書いてフォーム上の CommandButton を無効にしておき、ループが終わったら
CommandButton1.Enabled = True
CommandButton2.Enabled = True
と書いて CommandButton を有効に戻してください。

これを工夫すれば、CommandButton2 で CommandButton1 のループを途中キャンセルする処理もすることができます。

Private Canceled As Boolean

Private Sub CommandButton1_Click()

  CommandButton2.Enabled = False

  Dim i As Long
  For i = 1 To 50000
    DoEvents

    If Canceled = True Then
      MsgBox "キャンセルしました"
      Exit Sub
    End If

    Cells(i, 1).Value = ""
  Next i
End Sub

Private CommandButton2_Click()
  Canceled = True
End Sub



コードの行頭にあるスペースは見易さのために全角スペースで作成していますので、これをこのままコピペするとエラーになるかもしれません。
コピペするなら行頭の全角スペースを半角スペースに直してください。

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
...続きを読む

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 


人気Q&Aランキング

おすすめ情報