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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     if文の中に文字列を使用した分岐
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
spasuzuki
Åê¹ÆNo.39081
投稿日時: 2008-6-3 0:23
新米
居住地:
投稿: 14
使用環境:
WinXP,Flash CS3
if文の中に文字列を使用した分岐
はじめまして、スズキです。いつもお世話になっております。
今、私は、ライブドアの天気予報APIを使用して、
天気予報データを読み取ってFLASH内で、
天気別に画像を変えようという実験をしているのですが、
if文でつまづいてしまっています。

天気XMLデータの読み込みはうまくいったのですが、その後のif文でうまく実行されない状態です。

どなたかわかる方がいらしたら教えていただけると助かります。
よろしくお願いいたします。

function loadweather(success){
if(success){

???????????????????????
//天気を読み込む
var wtr_title=XPath.selectNodes(weatherXML,"lwws/telop/text()")
trace(wtr_title); ← ”曇のち晴” などの文字列を取得

if(wtr_title == "曇のち晴")
{
weather_bg.contentPath = "flv/weather/cloud_sunny.flv";
trace("seikou")
}
weather_bg.contentPath = "flv/weather/normal.flv";
trace("shippai")

???????????????????????
}
}

環境
windows XP
Flash CS3
actionscript2.0

ひろゆき
Åê¹ÆNo.39082
投稿日時: 2008-6-3 1:29
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: if文の中に文字列を使用した分岐
引用:
spasuzukiさんは書きました:
trace(wtr_title); ← ”曇のち晴” などの文字列を取得

ここでtraceした結果も説明される必要があるように思います。

XPath.selectNodesは、配列が取得されたように思いますが。


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

spasuzuki
Åê¹ÆNo.39083
投稿日時: 2008-6-3 10:24
新米
居住地:
投稿: 14
使用環境:
WinXP,Flash CS3
Re: if文の中に文字列を使用した分岐
ご返信ありがとうございます。

trace(wtr_title);
では、

曇のち晴

という文字列が返されてきます。
漢字だから駄目なのでしょうか。。。


ネコジャラ
Åê¹ÆNo.39087
投稿日時: 2008-6-4 0:57
新米
居住地: 東京
投稿: 22
使用環境:
WindowsXP Pro SP2
Flash8 Pro
mProjector V3
Re: if文の中に文字列を使用した分岐
以前同じような物を作ったので、もしかして…

取得した配列データから該当部分をStringに変換する際に
空白が入ってしまっているんじゃないでしょうか?

■第一段階
//livedoorの天気RSS(xmlから今日の天気を取得)
取得した配列から必要部分をStringに→var rrr:String = my_array2[1];
※私の場合
<item><title>[ 04日(水)の天気 ] 東京 - 曇り - 最高気温20℃ - 6月4日(水)</title><link>
の方の天気データを使ったので(温度も取得したかったので)
ここでsplitなり使って 曇り の前後にある余分な (空白)を取る必要がありました。
配列をtraceして表示された空白をそのままコピペしてsplitしてます。
下の<image><title>曇り</title><link>
の方の天気データを使うならそのまま使えると思います。

■第二段階
//確認用配列を準備(天気の種類分、30個)
checkWeather[0]:晴れ
checkWeather[1]:晴時々曇
checkWeather[2]:晴時々雨
checkWeather[3]:晴時々雪
checkWeather[4]:晴のち曇
checkWeather[5]:晴のち雨
checkWeather[6]:晴のち雪
checkWeather[7]:曇り←←なぜかここだけ「り」
checkWeather[8]:曇時々晴
checkWeather[9]:曇時々雨
checkWeather[10]:曇時々雪
checkWeather[11]:曇のち晴
checkWeather[12]:曇のち雨
checkWeather[13]:曇のち雪
checkWeather[14]:雨
checkWeather[15]:雨時々晴
checkWeather[16]:雨時々曇
checkWeather[17]:雨時々雪
checkWeather[18]:雨のち晴
checkWeather[19]:雨のち曇
checkWeather[20]:雨のち雪
checkWeather[21]:暴風雨
checkWeather[22]:雪
checkWeather[23]:雪時々晴
checkWeather[24]:雪時々曇
checkWeather[25]:雪時々雨
checkWeather[26]:雪のち晴
checkWeather[27]:雪のち曇
checkWeather[28]:雪のち雨
checkWeather[29]:暴風雪

あとはfor文で回して1個ずつ確認

var a:String=checkWeather[i];//aは上の配列の中身を順番に

if (a == rrr){//文字列が合致した所で
//天気に応じた画像ムービークリップ表示
//traceするとrrr:曇り=a:曇り
break;
}

外してたらすいません。
ひろゆき
Åê¹ÆNo.39090
投稿日時: 2008-6-4 22:16
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: if文の中に文字列を使用した分岐
引用:
spasuzukiさんは書きました:
trace(wtr_title);
では、

曇のち晴

という文字列が返されてきます。
漢字だから駄目なのでしょうか。。。

ダメなのは、XPathのメソッドを理解されないで
使用されていることではないでしょうか?

Flash標準のクラスではないものを使っているのであれば、
そのように明記すべきです。

XPathを使うのだ! (2)

もし、仮に、xfactorstudioのXPath4AS2クラスを用いているのであれば、
import com.xfactorstudio.xml.xpath.*;
と記述されていても良いと思いますが、その点については省かれています。
こうした説明は省略することなく、スクリプト自体に記載しておくべきでしょう。

var wtr_title:Array = XPath.selectNodes(weatherXML,"lwws/telop/text()");
だと思いますので、
wtr_title は文字列ではありません。配列です。
その配列と文字列を比較して、等しくなどなりようがないと思います。

if (wtr_title[0] == "曇のち晴") {
などのようにする必要がありますが、
読み込むxmlがどのようになっているのかについては、
具体的な記載がないので、こちらでは検証しかねます。


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

spasuzuki
Åê¹ÆNo.39092
投稿日時: 2008-6-5 1:06
新米
居住地:
投稿: 14
使用環境:
WinXP,Flash CS3
Re: if文の中に文字列を使用した分岐
p_c_qさん、ひろゆきさん、アドバイスをいただき誠にありがとうございました。
無事に悩みが解決できました。ご迷惑おかけしました。

今回、xfactorstudioのXPath4AS2を使って作成を行いました。
具体的な説明をしていなくて申し訳ございませんでした。

//XPath4AS2
import com.xfactorstudio.xml.xpath.*;
//API XML取得
var xmlUrl = "http://weather.livedoor.com/forecast/webservice/rest/v1?city="+city+"&day="+day;
/* ---------------------------------------------------------------------------- */

//天気 XMLデータの読み込み
function loadTenki(url){
weatherXML = new XML(); // XMLオブジェクトを生成する
weatherXML.ignoreWhite = true; //空白を埋める
weatherXML.onLoad = loadweather; // XMLがloadされたらloadweatherを実行
weatherXML.load(url); //XMLをload(urlにURLが代入)する
}
//XMLを読み込む
this.loadTenki(xmlUrl); //xmlUrl に取得先URLが代入

/* ---------------------------------------------------------------------------- */
// 天気データを解析
function loadweather(success){
if(success){

//天気情報
var wtr_title:Array = XPath.selectNodes(weatherXML,"lwws/telop/text()");
//配列を文字列に変換
var test:String = wtr_title[0];
trace(test) //出力 曇のち雨

var tenki:String ="曇り";
trace(test == tenki) //出力 false

if(test == tenki){
weather_bg.contentPath = "flv/weather/sunny_cloud.flv";
}
}
}

上記だとエラーになってしまい。


ひろゆきさんの配列と文字列を比較しているから等しくならないという点をしらべた結果

//配列要素を文字列に変換
var test:String = wtr_title[0].toString();
trace(test) //出力 曇のち雨

と.toStringを使用したらうまくいきました。

解決できたことをとても感謝です。
ありがとうございました。
ひろゆき
Åê¹ÆNo.39093
投稿日時: 2008-6-5 1:20
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: if文の中に文字列を使用した分岐
引用:
spasuzukiさんは書きました:
上記だとエラーになってしまい。

どういったエラーか、はっきりお書きになった方が良いと思いますが。

引用:
//配列要素を文字列に変換
var test:String = wtr_title[0].toString();
trace(test) //出力 曇のち雨

と.toStringを使用したらうまくいきました。

toString を用いる必要はないように思います。


var testList:Array = new Array();
testList = ["晴れ", "曇り"];
trace(testList);
の場合、「晴れ,曇り」と出力され、配列であることがはっきり分かりますが、
var testList:Array = new Array();
testList = ["晴れ"];
trace(testList);
の場合、「晴れ」とだけ出力され、まるで文字列であるかのように見えます。
見えるだけです。

var testList:Array = new Array();
testList = ["晴れ", "曇り"];
var testStr:String = "晴れ";
if (testList == testStr) {
	trace("一致");
} else {
	trace("不一致");
}

var testList:Array = new Array();
testList = ["晴れ", "曇り"];
var testStr:String = "晴れ";
if (testList[0] == testStr) {
	trace("一致");
} else {
	trace("不一致");
}


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

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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