DOBON.NETプログラミング道掲示板
(現在 過去ログ4 を表示中)
HOME
HELP
新規作成
新着記事
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
[
最新記事及び返信フォームをトピックトップへ
]
[ トピック内全8記事(1-8 表示) ] <<
0
>>
■34546
/ inTopicNo.1)
改行のコード
▼
■
□投稿者/ Vetty
一般人(4回)-(2020/10/04(Sun) 06:24:18)
環境/言語:[Windows10,VB]
分類:[.NET]
いろいろな場所から情報を集めてくると、改行コードの違いがあります。
0Ah だけ
0Dh だけ
0Dh 0Ah
0Dh 0Dh 0Ah
が出てきます・
また、WEBサイトでは意識的だと思いますが常に2行改行を使っている場合
もあります。
これを自分の資料としてテキストファイルにしてデータベース(もどき?)に
しているのですが、この場合はどのように統一して保管すべきなのでしょうか?
現在は、表示するときに見やすいように適当に置き換えのルールを決めて
表示しています。
0Ah だけ
0Dh だけ
0Dh 0Ah
のどれかにしてしまっていいものでしょうか?
引用返信
削除キー/
編集
削除
■34548
/ inTopicNo.2)
Re[1]: 改行のコード
▲
▼
■
□投稿者/ Azulean
大御所(518回)-(2020/10/04(Sun) 08:35:12)
■
No34546
に返信(Vettyさんの記事)
> 0Ah だけ
> 0Dh だけ
> 0Dh 0Ah
0A → LF
0D → CR
0D 0A → CR+LF
> 0Dh 0Dh 0Ah
これってなんだろう…。
> これを自分の資料としてテキストファイルにしてデータベース(もどき?)に
> しているのですが、この場合はどのように統一して保管すべきなのでしょうか?
結局これらは、改行をどのように符号化するかという話なので、保存するときにどれかに統一することは問題ありません。
閲覧時、あるいは何らかのアプリケーションの入力する際には改行コードを整える必要があるかもしれません。
なお、Windows 上では CR+LF に統一することが無難だと思います。
一部のコントロールでは CR+LF でないと改行表示してくれないので…。
引用返信
削除キー/
編集
削除
■34549
/ inTopicNo.3)
Re[2]: 改行のコード
▲
▼
■
□投稿者/ 魔界の仮面弁士
大御所(1301回)-(2020/10/04(Sun) 12:29:35)
■
No34548
に返信(Azuleanさんの記事)
>>0Dh 0Dh 0Ah
> これってなんだろう…。
ワードラップやソフト改行を表す代替文字列として
使われることがあります。たとえば EM_FMTLINES など。
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
SendMessage(TextBox1.Handle, EM_FMTLINES, IntPtr.Zero, IntPtr.Zero)
Label1.Text = TextBox1.Text.Replace("\", "\\").Replace(vbLf, "\n").Replace(vbCr, "\r")
SendMessage(TextBox1.Handle, EM_FMTLINES, New IntPtr(1), IntPtr.Zero)
Label2.Text = TextBox1.Text.Replace("\", "\\").Replace(vbLf, "\n").Replace(vbCr, "\r")
SendMessage(TextBox1.Handle, EM_FMTLINES, IntPtr.Zero, IntPtr.Zero)
End Sub
引用返信
削除キー/
編集
削除
■34550
/ inTopicNo.4)
Re[3]: 改行のコード
▲
▼
■
□投稿者/ Vetty
一般人(5回)-(2020/10/04(Sun) 12:53:12)
魔界の仮面弁士さま 回答ありがとうございます。
>なお、Windows 上では CR+LF に統一することが無難だと思います。
ということなので、そうさせていただきます。
>たとえば EM_FMTLINES など。
むずかしいことは考えずに、Textboxに表示した場合の見栄えで
置き換えていくことにします。
引用返信
削除キー/
編集
削除
■34551
/ inTopicNo.5)
Re[4]: 改行のコード
▲
▼
■
□投稿者/ Vetty
一般人(6回)-(2020/10/04(Sun) 12:54:57)
失礼しました、
「解決」にするのを忘れました。
解決
済
み!
引用返信
削除キー/
編集
削除
■34552
/ inTopicNo.6)
Re[1]: 改行のコード
▲
▼
■
□投稿者/ 魔界の仮面弁士
大御所(1302回)-(2020/10/04(Sun) 12:58:15)
■
No34546
に返信(Vettyさんの記事)
> この場合はどのように統一して保管すべきなのでしょうか?
自分の場合、accdb に入れるか、生バイナリのまま保持しておくことが
多いですが……テキスト形式での保存が必要な場合には
{テキスト部の文字数(10進数)}{CRLF}{改行入りテキスト本体}{CRLF}
のように、各テキストの先頭にデータサイズを埋め込んだりしています。
テキストを手動で書き換える事もある場合は、サイズ埋め込みは面倒なので
\r や \n で置き換えて単一行にすることもしばしばあります。
この場合は \\ へのエスケープも必要ですね。
改行パターンが事前に分からない場合、
Cr/CrLf/Lf をすべて CrLf に正規化するために
Dim rawString As String = …
Dim fmtString As String = rawString.Replace(vbCrLf, vbLf).Replace(vbCr, vbLf).Replace(vbLf, vbCrLf)
のようなコードを書くこともあります。
> 0Ah だけ
> 0Dh だけ
> 0Dh 0Ah
> のどれかにしてしまっていいものでしょうか?
元のバイナリを維持する必要があるかどうか、だと思います。
たとえば
No34549
で紹介した EM_FMTLINES などは、
[0Dh 0Dh 0Ah] と [0Dh 0Ah] を明確に区別しているため、
これらの改行コードを統一化してしまうと、
ソフト改行とハード改行を区別できなくなってしまいます。
しかし、それを許容できるケースであるのならば問題無いでしょう。
あるいは RFC1945 で定義された HTTP Header だと、
長い行の折り返しのために、行末に LWS (Linear White Space) すなわち
「CRLF(0Ah,0Dh) の後に、SP(20h) または HT(09h) が 1 つ以上続くトークン」
を付与することになっています。
この場合、出力側としては【CRLF を使うことが求められる】のですが、
その一方で、入力側は CRLF の代わりに単独 CR や単独 LF が
使われることも許容して処理するべきとされています。
そのほか XML Parser の世界では、XML 1.0 勧告において、
内部処理のために正規化した【LF のみに統一された文字列】として
処理することになっています。
なので、XML の解析処理を行った後は、CR や CRLF が
LF に変換された出力される可能性が高いです。
(未加工で出力してくる処理系もあります)
引用返信
削除キー/
編集
削除
■34553
/ inTopicNo.7)
Re[2]: 改行のコード
▲
▼
■
□投稿者/ 魔界の仮面弁士
大御所(1303回)-(2020/10/04(Sun) 13:16:45)
■
No34552
に追記(魔界の仮面弁士の記事)
>>0Ah だけ
>>0Dh だけ
>>0Dh 0Ah
>>のどれかにしてしまっていいものでしょうか?
> 元のバイナリを維持する必要があるかどうか、だと思います。
なお、メッセージボックスに出力する場合には
CrLf は使わない方が安全です。
たとえば VB.NET や Excel VBA から
Call MsgBox("1行目はCR" & vbCr & "2行目はCRLF" & vbCrLf & "3行目はLF" & vbLf & "さて、どうなるか?", vbInformation)
とした場合、いずれも 1 つの改行と認識されて 4 行構成で表示されます。
しかし、メッセージボックス上で Ctrl+C を押して
テキストの内容をクリップボードに送出した場合、LF → CRLF 変換が入り、
CR → 0Dh
CRLF → 0Dh,0Dh,0Ah
LF → 0Dh,0Ah
という自動変換を伴ってコピーされることになります。
これをメモ帳などに貼り付けると、CRLF のところが 2 重改行のように
見えてしまう事でしょう。
とはいえ、メッセージボックスそのものの表示は問題無いわけですから、
クリップボードの内容を意識しない場合には、元の改行を意識せず、
そのまま無加工でメッセージボックスに渡しても問題無いとも言えます。
引用返信
削除キー/
編集
削除
■34565
/ inTopicNo.8)
Re[5]: 改行のコード
▲
▼
■
□投稿者/ shu
大御所(490回)-(2020/10/20(Tue) 16:18:34)
■
No34551
に返信(Vettyさんの記事)
StringBuilderを使ってAppendLineをするのが
OS標準となるのでよいと思います。
解決
済
み!
引用返信
削除キー/
編集
削除
トピック内ページ移動 / <<
0
>>
このトピックに書きこむ
過去ログには書き込み不可
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
-
Child Tree
-