トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     改行を区切りにした split()
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ebi
Åê¹ÆNo.49718
投稿日時: 2013-3-31 4:29
フォーラム芸人
居住地: nagoya
投稿: 926
使用環境:
.6.8
CS6
<参考書>
・基本からしっかりわかるActionScript 3.0(既読)
・ActionScript3.0プロフェッショナルガイド(進行中)
・ActionScript3.0パフォーマンスチューニング(未読)
・ActionScript 3.0 逆引きクイックリファレンス(購入予定...
Re: 改行を区切りにした split()
ひろゆきさん、ご返信ありがとうございます。

wiki誘導…ありがとうございます。読みました。
しかし、何をもって「一般的」なのか理解できませんでした。
UNIXはじめ多くの(現在の主流の)OSで使用されてるって意味ですか?

念のためもう一度申しますが、別にケチをつけているわけではなく、
単に疑問というだけの事なので悪しからずお願いします(-人-;)
ebi
Åê¹ÆNo.49719
投稿日時: 2013-3-31 4:47
フォーラム芸人
居住地: nagoya
投稿: 926
使用環境:
.6.8
CS6
<参考書>
・基本からしっかりわかるActionScript 3.0(既読)
・ActionScript3.0プロフェッショナルガイド(進行中)
・ActionScript3.0パフォーマンスチューニング(未読)
・ActionScript 3.0 逆引きクイックリファレンス(購入予定...
Re: 改行を区切りにした split()
野中さん、ご返信ありがとうございます。

いよいよもって…_| ̄| ...○

文字数…これは何を気をつける事を示唆されておられるのでしょう。
例に出されたコードの意図されるところが分かりませんでした。

コードに1行(赤)加えました。(あとトレース分割しました)
その上で解析…というか解釈(青)を書いています。

var _str:String = "\r\n";
//変数「_str」にCRとLFを代入 中身はそのまんま CR LF
var nLength:int = _str.length;
//_strの文字数を変数「nLength」に代入
RTN.text = _str;
//テキストフィールド「RTN」に_strの値を挿入 LFはCRに変換され中身は CR CR
var nLength2:int = RTN.text.length;
//RTNの文字数を変数「nLength2」に代入
trace(nLength);
//変数「_str」の文字数 :2
trace(nLength2);
//テキストフィールド「RTN」の文字数 :2
trace(_str.charCodeAt(nLength - 1));
//変数「_str」の1の位置(文字数2-1)の文字 つまりLFの文字コード :10
//ちなみに_str.charCodeAt(0)ならCRだから、13
trace(RTN.text.charCodeAt(nLength - 1));
//テキストフィールド「RTN」の1の位置(の文字数2-1)の文字 つまりCRの文字コード :13
//ちなみにRTN.text.charCodeAt(0)ならCRだから、13


最初「変数とテキストフィールドでは文字数が変わっちゃうぜ」という事かと思い
「そんなバカな」とテキストフィールドの文字数も調べましたが、同じ2。
どうやら違う…と。
だとすれば"文字数に注意"とは"文字位置の指定に注意"という事でしょうか?

あ。もしかして「WindowsのCR+LFでの改行は1文字じゃないぞー」って事を
おっしゃりたいのでしょうか。
関係ないですが、CR+LFの外部テキスト読み込んで(やりませんが)
テキストフィールドで使う時は改行ごとに空白行が1つできちゃいますねぇ。




あと確認ですがTextField.textプロパティに"\n"を"加える"とは
テキストフィールドに「挿入する・入力する」という意味ですよね?
野中文雄
Åê¹ÆNo.49720
投稿日時: 2013-3-31 6:19
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 改行を区切りにした split()
Windowsのテキストではひとつの改行が、TextField.textプロパティに入れると改行("\r")ふたつになります。String.lengthプロパティの値はその分増えます。改行のつぎの文字をとるインデックス番号も変わるということです。

制御文字がふたつ("\r\n")あるのだから、ふたつになるのは当然と考えられているのでしたら結構です。けれども、今回のご質問の発端は、制御文字(コード)を確かめられていないことでした。すると、改行ひとつは制御文字もひとつと思い込むおそれがあるでしょう。
引用:
ebiebiさんは書きました:
あ。もしかして「WindowsのCR+LFでの改行は1文字じゃないぞー」って事を
おっしゃりたいのでしょうか。
関係ないですが、CR+LFの外部テキスト読み込んで(やりませんが)
テキストフィールドで使う時は改行ごとに空白行が1つできちゃいますねぇ。

TextField.textプロパティに、"\n"が含まれたテキストを代入するということです。
引用:
あと確認ですがTextField.textプロパティに"\n"を"加える"とは
テキストフィールドに「挿入する・入力する」という意味ですよね?


----------------
 

ひろゆき
Åê¹ÆNo.49721
投稿日時: 2013-3-31 11:01
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 改行を区切りにした split()
ボクが勝手に一般的だと思っているだけです。
そうじゃないと思うなら、というか、Flash内部的にはLFに統一すればいいだけの話ですし。


----------------
質問する際は、回答者に具体的な情報を与えてください。

ebi
Åê¹ÆNo.49722
投稿日時: 2013-3-31 11:39
フォーラム芸人
居住地: nagoya
投稿: 926
使用環境:
.6.8
CS6
<参考書>
・基本からしっかりわかるActionScript 3.0(既読)
・ActionScript3.0プロフェッショナルガイド(進行中)
・ActionScript3.0パフォーマンスチューニング(未読)
・ActionScript 3.0 逆引きクイックリファレンス(購入予定...
Re: 改行を区切りにした split()
ご返信ありがとうございます。

理解しました!
確かに改行ひとつは制御文字もひとつ(CR+LFでも)と勘違いする人もいるでしょうね。
そのままじゃ文字位置(インデックス番号)に気を遣わないといけない、
よって改行コードは事前に統一した方が良いとそういう事ですね。


ちなみに、
引用:
テキストフィールドに入力されれば改行はとにかく \r!

という理解で良いのですかね?

例えば、Unix(改行コード\n)、Windows(改行コード\r\n)から
Flash内の入力テキストフィールド(input)にて改行を入力したとしても、
テキストフィールド内の改行は一律(\r)という事で。


これですが、おそらく野中さんは読み込んだ外部テキストから代入された時と解釈され、
Windows(改行コード\r\n)においての注意点をお教えくださったと思うのですが、
お尋ねしたかったのは、
Flashのステージ上の入力テキストフィールド(input)(dynamicではなく)にて
例えばWindowsマシンから、挿入ポイントを置き、キーボードをタイプし、
改行を入力した時も、テキストフィールドはテキストフィールドなんだから、
即座に \r に変換されますよね?
 という意味でした。

この場合も、\r\nとして入力され、\r\rに変換されるのですか?って意味です。
もしそうだと、WindowsマシンからFlashの入力テキストフィールドにタイプ入力で
改行すると、いちいち余分に空白行ができてしまう(\r\rなので)事になる…???
そんな話は聞いた事ないので、Windowsマシンからであっても
入力テキストフィールドへのタイプ入力での改行は\r\n が \r に変換されるのでしょうか。
それともテキストフィールドの見かけ上(表示上)は余白行はできないけれど、
制御文字コードとしては\r\rを内包してる…なんて事はあるのでしょうか。

 入力テキストフィールドであってもコピペでの入力の場合はどうなんでしょう。
これは…外部テキスト扱い? \r\nは\r\rと変換されるのでしょうか。
(となるとWindowsマシンの人がコピペすると余白行ができてしまう事に…)


 「外部」と書いて、ピーンときたんですが、

ひろゆきさんの

…いや、これはひろゆきさんへの返信に改めます。
ebi
Åê¹ÆNo.49723
投稿日時: 2013-3-31 11:44
フォーラム芸人
居住地: nagoya
投稿: 926
使用環境:
.6.8
CS6
<参考書>
・基本からしっかりわかるActionScript 3.0(既読)
・ActionScript3.0プロフェッショナルガイド(進行中)
・ActionScript3.0パフォーマンスチューニング(未読)
・ActionScript 3.0 逆引きクイックリファレンス(購入予定...
Re: 改行を区切りにした split()
というところで、ひろゆきさんからご返信。ありがとうございます。

引用:
というか、Flash内部的にはLFに統一すればいいだけの話ですし

との事ですので、おそらくこれで合ってると思いますが、
せっかくなので野中さんへの返信時に思いついた事をその時のままポストしておきます。

引用:
LFが一般的だから。


この言葉の謎ですが、ご紹介いただいたにゃあプロジェクトの改行コード統一関数
CR (\r) でなくLF(\n)でjoinしてる理由は、外部からのテキスト(改行コードばらばら)を
Flash(swf)内の変数内で処理し、それをFlash外に渡す事を想定しての事でしょうか。
サーバで使われてるOSはUNIX系が一般的。UNIX系の改行コードはLF。
そいつに渡すんだからLF。だから、LFに統一 …と、そういう事でしょうか。

あれ? でも冒頭で「これをFlashで表示しようとしたときに」とありますねぇ
テキストフィールドではLF(\n)でもCR (\r)に変換されてしまうので、
「最初からCRでjoinした方がいいのでは?何か理由が…」と思ったのですが…んー
変数をFlash内でテキストフィールド以外に"表示"する方法は…???

あった! そういえば、この記事 ActionScript 2.0 でした。
2.0なら変数を表示する「変数ボックス」ってのがありましたね!久しく使ってないですが。

試してみました。AS2.0にて変数ボックス「RESULT」をステージに配置、ステージの1フレームに以下コード。
function unifyLineFeedCode (str:String):String {
	var CR:String = String.fromCharCode (13);
	var LF:String = String.fromCharCode (10);
	str = str.split (CR + LF).join (LF);
	str = str.split (CR).join (LF);
	return str;
}
RESULT = unifyLineFeedCode ("A\r\nB\r\nC");
var ARY:Array = RESULT.split("\n");
trace(ARY.length);    //出力:3


おー見事、\n でsplitされましたー。
つまり、"表示"されたが \n は \n のまま。
変数ボックスはテキストフィールドではないのでCR(\r)に変換されないって事ですね。
念のため、試しに「RESULT」を変数ではなくテキストフィールドにするとぉ…

function unifyLineFeedCode (str:String):String {
	var CR:String = String.fromCharCode (13);
	var LF:String = String.fromCharCode (10);
	str = str.split (CR + LF).join (LF);
	str = str.split (CR).join (LF);
	return str;
}
RESULT.text = unifyLineFeedCode ("A\r\nB\r\nC");
var ARY:Array = RESULT.text.split("\n");
trace(ARY.length);    //出力:1


あー  やっぱsplitされませんね。
つまりテキストフィールドに代入されたのでCR(\r)に変換されたという事ですね。
謎、解けましたー(たぶん)スッキリです。

ActionScript3.0 には、変数ボックスというもの自体がナイので、
Flashで表示する方法は、テキストボックスのみ、
ってことは、LF(\n)ではなくCR(\r)に統一した方が良さそうですね。
野中文雄
Åê¹ÆNo.49734
投稿日時: 2013-4-4 11:34
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 改行を区切りにした split()
「仕様」として明らかなのは、おそらく以下の一文だけだと思います。

ActionScript 3.0リファレンスガイド「TextField」より引用:
行は復帰文字('\r'、ASCII 13)で区切られます。

ですから後は、この「仕様」から合理的に推測し、実装を確かめてみるという作業になります。

どの環境であれ、ひとつの改行キーをタイプして2行改行が入ったら、ほぼ間違いなくバグでしょう。他方、テキストファイルをエディタなどで開いた場合、変な制御文字が入ったり、改行が増えるのは、経験することです(そこで読込み形式のオプションが用意されていたりします)。

FlashのTextFieldインスタンスへのコピー&ペーストで改行の扱いがおかしくても、付合いが長いのでとくに驚くことはありません。でも、実装として、もとデータと同じ表示にすることは可能だと思われます。
引用:
ebiebiさんは書きました:
これですが、おそらく野中さんは読み込んだ外部テキストから代入された時と解釈され、
Windows(改行コード\r\n)においての注意点をお教えくださったと思うのですが、
お尋ねしたかったのは、
Flashのステージ上の入力テキストフィールド(input)(dynamicではなく)にて
例えばWindowsマシンから、挿入ポイントを置き、キーボードをタイプし、
改行を入力した時も、テキストフィールドはテキストフィールドなんだから、
即座に \r に変換されますよね?
 という意味でした。

この場合も、\r\nとして入力され、\r\rに変換されるのですか?って意味です。
もしそうだと、WindowsマシンからFlashの入力テキストフィールドにタイプ入力で
改行すると、いちいち余分に空白行ができてしまう(\r\rなので)事になる…???
そんな話は聞いた事ないので、Windowsマシンからであっても
入力テキストフィールドへのタイプ入力での改行は\r\n が \r に変換されるのでしょうか。
それともテキストフィールドの見かけ上(表示上)は余白行はできないけれど、
制御文字コードとしては\r\rを内包してる…なんて事はあるのでしょうか。

 入力テキストフィールドであってもコピペでの入力の場合はどうなんでしょう。


----------------
 

ebi
Åê¹ÆNo.49745
投稿日時: 2013-4-12 10:45
フォーラム芸人
居住地: nagoya
投稿: 926
使用環境:
.6.8
CS6
<参考書>
・基本からしっかりわかるActionScript 3.0(既読)
・ActionScript3.0プロフェッショナルガイド(進行中)
・ActionScript3.0パフォーマンスチューニング(未読)
・ActionScript 3.0 逆引きクイックリファレンス(購入予定...
Re: 改行を区切りにした split()
野中さん、ご回答ありがとうございます。
お礼が遅くなりました。すみません。

あいにく、確認できる環境が今ないので、
折りをみて色々確かめようと思います。(´?`;)ゞ

野中さんとひろゆきさんのおかげで
ぼんやりとしか理解してなかった改行について
だいぶ(個人的に)理解を深められました。

ありがとうございました。 ⌒┌○ ペコ 
« 1 (2)
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops