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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     XMLで読み込んだテキストが改行されない
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
Sif
Åê¹ÆNo.12961
投稿日時: 2004-12-2 2:41
半人前
居住地: たこ焼き王国
投稿: 36
使用環境:
XP SP2 Home
Pro 7.2
Re: XMLで読み込んだテキストが改行されない
こんにちは。

HNaokiさん、おめでとうございます?
ひとつの処理にもいろいろな方法があるということで…
(なんちって )

空野さん、いえいえめっそうもない。
今後もご教授よろしくお願いします。

野中さん、ありがとうございます。
いつも勉強させていただいております。
今回もとても勉強させていただきました!
yoshi04
Åê¹ÆNo.12989
投稿日時: 2004-12-2 17:56
半人前
居住地: 大阪府
投稿: 39
使用環境:
win2000,Flash MX 2004 pro
Re: XMLで読み込んだテキストが改行されない
みなさんいつもお世話になっております。
解決した問題をむしかえすようで申し訳ないんですが
下記のXMLファイルのように\nを使って改行したのではなく
Enterキーで改行した場合Flashで読み込んで表示すると
行間が1行分余分にあいてしまいます。

xmlファイル
<contents>
  <comment>サイドブラシ使用時:690mm
サイドブラシ未使用時:500mm</comment>
</contents>

こういう書き方をしなければいいのですが会社で使っているアプリケーションがこういう形でXMLを書き出してしまいます。
それで書き出したXMLをSWFで読み込んで表示するというアプリケーションなんですがSWFの原本のFLAファイルがないのでどういうコードになっているのかわかりません。
今回表示するSWFのデザインを変更するため一から作り直そうと思い
色々とやっているのですがこの改行のところでつまっています。(他のところでもつまりましたがこのサイトのおかげでなんとか解決しています。)
書き出したXMLファイルも膨大な量になっているので修正するのが困難な状態です。何かいい方法がないでしょうか?
ご教授よろしくお願いします。
空野大二郎
Åê¹ÆNo.12990
投稿日時: 2004-12-2 19:27
職人
居住地: 愛知
投稿: 389
使用環境:
 XP:Home
FlashMX
IE6.0+FlashPlayer7,0,19
CPU:Pentium4 2.26GHz
メモリ:1,024MB
Re: XMLで読み込んだテキストが改行されない
 まいど。

 「アプリケーションが改行して、データをXML形式でサーバに保存
している」と、安直な予測をしてみます。
 すると、改行がUNIX系のものでされていると考えてみます。

改行コードマッチング使用機種
LF\n: UNIX系OS

 おそらく改行されているのは、「\n」が挿入されているためだと考えられます。
 改行を削除して行間をちぢめたいなら、表示する前にそれを実行
されればよろしいと思われます。

this.convSentence = function (theStc, oldKey, convKey) {
	var sentence_array = theStc.split(oldKey);
	return sentence_array.join(convKey);
};
 
outstr_str = <comment></comment>のテキストノード;
outstr_str = convSentence(outstr_str, "\n", "");
trace(outstr_str);//「サイドブラシ使用時:690mmサイドブラシ未使用時:500mm」



 ・・・おかしいですね。 改行を削除すると、読みにくくなります。

 yoshi04さんの実現なさりたい状態を計りかねていますので、もし、
目的が異なる場合は、下記の三つをはっきりと記述していただけない
でしょうか?
 よろしくお願いします。

1:現状
2:目的
3:目的達成後の状態


----------------
空野 大二郎 アニメーター作家
桜の道

Sif
Åê¹ÆNo.12994
投稿日時: 2004-12-3 2:20
半人前
居住地: たこ焼き王国
投稿: 36
使用環境:
XP SP2 Home
Pro 7.2
Re: XMLで読み込んだテキストが改行されない
こんにちは。

yoshi04さんの提示されているxmlをテキストにコピペして保存、
そのファイルをflaに[my_Xml.load]で読み込み、
さらにそのテキストノードをダイナミックテキスト
[myTextField.text]に流し込んだところ、

━━━━━━━━━━━━━━━━
サイドブラシ使用時:690mm
サイドブラシ未使用時:500mm
━━━━━━━━━━━━━━━━

と表示されるはずが、

━━━━━━━━━━━━━━━━
サイドブラシ使用時:690mm

サイドブラシ未使用時:500mm
━━━━━━━━━━━━━━━━

と表示されてしまいました。
そこで、ダイナミックテキストの内容をデバッガで確認すると、
サイド?690mm\r\nサイド?500mm

のようになってしまっていました。
そこで、前述の置換関数convSentenceでいろいろと実験を
してみたのですが、下記のような症状です。
"\r\n"を"\n"に置換 → "\r\r" 改行2つのままに
"\r"  を""  に置換 → ""     改行ナシに

どうやら、別の切り口で攻めなければならないようです…

どなたか、ご存知の方よろしくお願いします?
youich
Åê¹ÆNo.12996
投稿日時: 2004-12-3 4:46
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: XMLで読み込んだテキストが改行されない
引用:


と表示されてしまいました。
そこで、ダイナミックテキストの内容をデバッガで確認すると、
サイド?690mm\r\nサイド?500mm

のようになってしまっていました。
そこで、前述の置換関数convSentenceでいろいろと実験を
してみたのですが、下記のような症状です。
"\r\n"を"\n"に置換 → "\r\r" 改行2つのままに
"\r"  を""  に置換 → ""     改行ナシに

どうやら、別の切り口で攻めなければならないようです…

どなたか、ご存知の方よろしくお願いします?

私はMacなので意識することはないのですが、
windowsの改行は"\r\n"で、Flashは"\r"も"\n"も改行と認識しますので、
xmlに限らずloadVars等でもwindowsで作ったtextデータを
Flashで読みこむと一行開いた状態になるはずだと思います。

で、それは"\r\n"->"\n" or "\r\n"->"\r"の置換で空行を消せると思うのですが。。。
↓ではうまくいかないですか?

//System.useCodePage = true;
var my_xml = new XML();
my_xml.ignoreWhite = true;
my_xml.load('xx.xml');

CR = chr(13); //Mac
LF = chr(10); //Unix
CRLF = CR+LF; //Win

my_xml.onLoad = function(ok) {
	if (ok) {		 //contents  //comment  //text
		var comment = this.firstChild.firstChild.firstChild.nodeValue;
		myTextField.text = comment.split(CRLF).join(LF);
	} else {
	}
};


あ、逆に最初はXMLのtextが改行されないという話題だったんですねー
そこは改行コードをHTMLエンティティ化してやればどうなんでしょう?("&"全角にしてます)

<contents>
	<comment>サイドブラシ使用時:690mm&#10;サイドブラシ未使用時:500mm</comment></contents>


----------------
- yo

yoshi04
Åê¹ÆNo.12999
投稿日時: 2004-12-3 9:24
半人前
居住地: 大阪府
投稿: 39
使用環境:
win2000,Flash MX 2004 pro
Re: XMLで読み込んだテキストが改行されない
こんにちは。いつもお世話になっています。
空野さんSifさんyouichさん返信どうも有り難うございます。
引用:

Sifさんは書きました:
こんにちは。

yoshi04さんの提示されているxmlをテキストにコピペして保存、
そのファイルをflaに[my_Xml.load]で読み込み、
さらにそのテキストノードをダイナミックテキスト
[myTextField.text]に流し込んだところ、

━━━━━━━━━━━━━━━━
サイドブラシ使用時:690mm
サイドブラシ未使用時:500mm
━━━━━━━━━━━━━━━━

と表示されるはずが、

━━━━━━━━━━━━━━━━
サイドブラシ使用時:690mm

サイドブラシ未使用時:500mm
━━━━━━━━━━━━━━━━

と表示されてしまいました。

そうなんです。

━━━━━━━━━━━━━━━━
サイドブラシ使用時:690mm
サイドブラシ未使用時:500mm
━━━━━━━━━━━━━━━━

というふうに表示したいんですけど、一行余分に空いてしまいます。
youichさんのコードで試してみます。
みなさんどうも有り難うございます。
yoshi04
Åê¹ÆNo.13002
投稿日時: 2004-12-3 12:53
半人前
居住地: 大阪府
投稿: 39
使用環境:
win2000,Flash MX 2004 pro
Re: XMLで読み込んだテキストが改行されない
引用:

"\r\n"を"\n"に置換 → "\r\r" 改行2つのままに
"\r"  を""  に置換 → ""     改行ナシに

どうやら、別の切り口で攻めなければならないようです…

どなたか、ご存知の方よろしくお願いします?


Sifさんの試された下記のコードでできました?

node = convSentence(node, "\r\n", "\n");

youichさんから教えていただいたコードではうまくいきませんでした。 まだアクションスクリプトをあまり理解していないので僕の書き方に問題があるのかも

解決していたスレッドに投稿して申し訳ありませんでした。
空野さんSifさんyouichさんどうも有り難うございました。
youich
Åê¹ÆNo.13004
投稿日時: 2004-12-3 14:09
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: XMLで読み込んだテキストが改行されない
引用:


youichさんから教えていただいたコードではうまくいきませんでした。 まだアクションスクリプトをあまり理解していないので僕の書き方に問題があるのかも

yoshi04さんのアクションスクリプトの書き方がおかしいんじゃないと思いますよ(笑)
yoshi04さんがポストされたアプリケーションから書き出されているというXMLファイルの
空白の部分が全角の空白になっているからです。
全角の空白を□で表すと↓のようになっています。

<contents>

□□<comment>サイドブラシ使用時:690mm

サイドブラシ未使用時:500mm</comment>

</contents>

全角の空白はignoreWhiteをtrueに設定していても
意味のあるテキストノードとして処理されます。

で、私はこれをポストされた時のミスかバグだろうと考えて
全角の空白を半角の空白として考えてコードを書きました。

もしこの空白がミスじゃなく意味のあるものならば先にポストしたコードは
以下のようにcommentノードを探すのにもうひとつ(nextSibling)進める必要があります。

my_xml.onLoad = function(ok) {
	if (ok) {		 //contents  //comment  //text
		trace(this.firstChild.firstChild.nodeType); //3 テキストノード
		var comment = this.firstChild.firstChild.nextSibling.firstChild.nodeValue;
		var str = myTextField.text = comment.split(CRLF).join(LF);
		trace(str);
	} else {
	}
};


ついでに、いきさつが良く解るようなテストコードです。

System.useCodePage = true;

ZENKAKU_SPACE = " ";
HANKAKU_SPACE = " ";
LF = chr(10);
CRLF = chr(13) + chr(10);

var x = new XML();
x.ignoreWhite = true;
x.onData = function(d) {
	var s = d.split(ZENKAKU_SPACE).join("□");
	printTitle("そのままのxmlデータ");
	trace(s);
	s = s.split("□").join(HANKAKU_SPACE);
	
	printTitle("xmlデータの全角スペースを半角スペースに変換");
	trace(s);
	this.parseXML(s);
	this.onLoad(true);
};

x.onLoad = function(ok){
	if (ok) {		 //contents  //comment  //text
		var comment = this.firstChild.firstChild.firstChild.nodeValue;
		var str = myTextField.text = comment.split(CRLF).join(LF);
		printTitle("comment のtextnodeの改行をcrlf -> lf に変換");
		trace(str);
		
	} else {
	}
};
		
x.load("xxx.xml");

function printTitle(str){
	trace("----------------------------------------------------------------------");
	trace(str);
	trace("----------------------------------------------------------------------");
}


出力
----------------------------------------------------------------------
そのままのxmlデータ
----------------------------------------------------------------------
<contents>

□□<comment>サイドブラシ使用時:690mm

サイドブラシ未使用時:500mm</comment>

</contents>
----------------------------------------------------------------------
xmlデータの全角スペースを半角スペースに変換
----------------------------------------------------------------------
<contents>

  <comment>サイドブラシ使用時:690mm

サイドブラシ未使用時:500mm</comment>

</contents>
----------------------------------------------------------------------
comment のtextnodeの改行をcrlf -> lf に変換
----------------------------------------------------------------------
サイドブラシ使用時:690mm
サイドブラシ未使用時:500mm

引用:

解決していたスレッドに投稿して申し訳ありませんでした。

あら、最初のスレッドとは違うかったのですね、
先ほどはいっしょくたにポストしてすみませんでした。


----------------
- yo

yoshi04
Åê¹ÆNo.13007
投稿日時: 2004-12-3 15:53
半人前
居住地: 大阪府
投稿: 39
使用環境:
win2000,Flash MX 2004 pro
Re: XMLで読み込んだテキストが改行されない
youichさんご丁寧に本当にありがとうございます。
引用:

youichさんは書きました:
引用:

yoshi04さんがポストされたアプリケーションから書き出されているというXMLファイルの
空白の部分が全角の空白になっているからです。
全角の空白を□で表すと↓のようになっています。

<contents>

□□<comment>サイドブラシ使用時:690mm

サイドブラシ未使用時:500mm</comment>

</contents>

全角の空白はignoreWhiteをtrueに設定していても
意味のあるテキストノードとして処理されます。



そうなんですね。全角の空白部分を削除するとちゃんと表示します。
使っているアプリケーションでXMLファイルを書き出すとものすごい
見にくいファイルになっています。なぜああなるのか…
youichさんの書いていただいたテストコードでもっと勉強します。
youichさんどうも有り難うございました。
Sif
Åê¹ÆNo.13024
投稿日時: 2004-12-4 1:44
半人前
居住地: たこ焼き王国
投稿: 36
使用環境:
XP SP2 Home
Pro 7.2
Re: XMLで読み込んだテキストが改行されない
こんにちは。

 (文中の"\"は円マークに読み替えてください)

yoshi04さん、おめでとうございます?
youichさん、ありがとうございます?

解決されてバンザイなのですが、ぢつは自分自身の前回の書き込みで
試した手順に少し不思議な点がありましたので、報告させていただきます。

"\r\n"を"\n"に置換 → "\r\r" 改行2つのままに
"\r"  を""  に置換 → ""     改行ナシに

と前回書きましたが、本日再チャレンジしたところ、キチンと"\r\n"を"\n"に
置換することができました。
「はて?
と思い、前回に試したことを思い出してみると、
// 前回
// ステージに配置したダイナミックテキストにXMLテキストノードを
// 読み込み、そのテキストをステージ上とデバッガで確認していました
test_txt.text = <読み込んだXMLテキストノード>
test_txt.text = test_txt.text.split("\r\n").join("\n");
// 置換結果は"\r\r"でした。

// 今回
// 変数にXMLテキストノードを読み込み、そのテキストを
// traceとデバッガで確認していました。
var test_str:String = <読み込んだXMLテキストノード>
test_str = test_str.split("\r\n").join("\n");
trace(test_str);
// 置換結果は"\n"でした。

という感じでした。

改行コードは、テキストフィールドに代入した時点で
見えないチカラが働いてしまうのでしょうか。
不思議デス…
何なのでしょう


P.S. youichさんへ
些細なことですが、[chr(number)]コマンドは[使用を避ける言語エレメント]
としてMacromediaが定めておりますので、代わりに[String.fromCharCode()]を
使用された方が良いかと思われます?
 (アゲアシすいません…)
Flashのヘルプに記載されていますので、ご確認ください。
 (youichさんの環境[Flash MX]での記載箇所が分かりませんので
  説明は省略させていただきます)
« 1 (2) 3 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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