Просмотр полной версии : чтение из длинных строк
подскажите пожалуйста как вырезать нужный кусок из html файла,
(html в виде строки ~20 000+ символов)
а то обычный substring не работает, все зависает!!!
нужно вырезать начиная с "on the Web:" и + ещё 90 символов вперед.
как это сделать?
А что если это как набор байт в ByteArray загрузить и руками по байтам лазить?
(хотя сомнительно что-то, всего 20 000 символов и траблы уже появились)
Речь точно про AS3?
сейчас попробую.
да, as3.0
function onLoaded(evt:Event):void
{
var ansStr:String = new String();
ansStr = myLoader.data;
trace(ansStr = ansStr.substring(9000,9050));
}
---
не могли бы привести пример про ByteArray?
1. Надо прочитать в хелпе про загрузку бинарных данных с помощью URLLoader и загрузить текст как бинарник
2. Допустим он у нас есть
var bytes:ByteArray = ...
var length:int = bytes.length;
for (var i:int = 0; i < length; i++)
{
var byte:int = bytes[i];
if (byte == "on the Web:".charCodeAt(0))
{
byte = bytes[i + 1]
if (byte == "on the Web:".charCodeAt(1))
{
...
...
if (byte == "on the Web:".charCodeAt(10))
{
trace(bytes.readUTFBytes(90));
break;
}
}
}
}
Алгоритм не оптимален, возможно не корректен, и полон копипасты.
Но суть именно такая - если сработает - думаю, сможете его соптимизировать.
Кстати, а если без всякого ByteArray, getCharAt или getCharCodeAt на такой большой строке работают?
Может ими?
package
{
import flash.display.Sprite;
import flash.utils.getTimer;
public class TestLongString extends Sprite
{
private static const POOL:Array = [];
public function TestLongString()
{
super();
// source.length: 14999 1
// source.indexOf 14999 0
// source.substring 12345 0
this.testSubsting();
}
private function testSubsting():void
{
var timer:int = getTimer();
var source:String = this.generate();
trace("source.length:", source.length, getTimer() - timer);
source = source + "12345" + source;
var index:int = source.indexOf("12345");
timer = getTimer();
trace("source.indexOf", index, getTimer() - timer);
timer = getTimer();
var subseq:String = source.substring(index, index + 5);
trace("source.substring", subseq, getTimer() - timer);
}
private function generateDictionary():String
{
var i:int = 65;
POOL.length = 0;
while (i++ < 90) POOL[POOL.length] = String.fromCharCode(i);
return POOL.join();
}
private function generate():String
{
var dictionary:String = this.generateDictionary();
POOL.length = 0;
var i:int;
while (i++ < 300) POOL[POOL.length] = dictionary;
dictionary = POOL.join();
POOL.length = 0;
return dictionary;
}
}
}
Я подозреваю, что у меня неплохой компьютер, но, смотрите... AS3, это значит, что как минимум Flash Player 9, почитайте системные требования к нему... Он все-таки на микрокалькуляторах работать не будет :)
ЗЫ: Кто вас научил new Sting() - более странного способа создать пустую строку в AS3 не существует. Не делайте так никогда - используйте литерал пустой строки (""), так и быстее, и не запутаете никого.
все, решил проблему.
надо было перезагрузить cs5.
сижу с 12!
var startIndex = ansStr.search("><li>")+5;
var endIndex = startIndex + 90;
trace(ansStr.slice(startIndex,endIndex));
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.