我是使用动作脚本的新手,所以我道歉,如果这没有意义,我遇到的问题是来自我的arduino的传入字节没有正确存储在数组中。字节从我的arduino一次一个地存在,并将存储在as3中的数组中。
我有两个值SF-F8-001,SF-F8-002和SF-F8-003等......当我跟踪输入的字节时,我得到这个:
S
F
-
F
8
-
0
0
1
所以当我看到我意识到我需要一个数组存储字节,因为他们进来但是我尝试了很多不同的东西,但它没有工作 但是下面的代码似乎让我接近我想要的结果
import flash.events.*;
import flash.net.Socket;
import flash.utils.ByteArray;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequestMethod;
var ary:Array = new Array();
var bar_grab:Array = new Array();
var array:Array = new Array();
trace("__AS3 Example__");
var socket:Socket = new Socket("localhost",5331);
socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
function socketDataHandler(event:ProgressEvent):void
{
var str:String = String(socket.readUTFBytes(socket.bytesAvailable));
var b:String;
bar_grab.push(str);
b = bar_grab.join("");
boxtwo.text = b;
}
这段代码让我这个
SF-F8-001SF-F8-002SF-F8-003 etc...
然而,我想要的结果就是这个
SF-F8-001,SF-F8-002,SF-F8-003 etc....
所以,如果有人能帮助我解决这个问题,我将不胜感激
谢谢
答案 0 :(得分:0)
如果您事先知道每个项目将包含多少个字符,您可以阅读所有字符串并获取每个单独的项目:
//Main string containing all items
var allString:String = "123456789";
//Number of chars in of item
var charsInItem = 3;
var item:String;
var index:int;
var resultArray:Array = new Array();
for(var i:int = 0; i < allString.length/charsInItem; i++)
{
index= i*charsInItem;
//traces name of one item
item = allString.slice(index, index+charsInItem);
resultArray.push(item);
trace(item);
}
//Output:
//123
//456
//789
如果你不知道一个项目中的多个字符或者它有所不同,我建议调整Arduino代码并在每个项目之间添加某种标记。就像说逗号(,)。然后你的字符串看起来像这样:&#34; item1,item2,longerItem3&#34;。您可以将该字符串拆分为数组:
var array:Array = new Array();
var allString:String = "item1,item2,longerItem3";
//This splts string into array items using comma (,) as a seperator
array = allString.split(",");
for(var i:int = 0; i < array.length; i++)
{
//trace every array element
trace(array[i]);
}
//Output:
//item1
//item2
//longerItem3
我应该补充一点,即使你知道一个项目中有多个字符,我仍然建议使用方法nr.2。