Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   чтение из длинных строк (http://www.flasher.ru/forum/showthread.php?t=152514)

leo150 18.03.2011 21:50

чтение из длинных строк
 
подскажите пожалуйста как вырезать нужный кусок из html файла,
(html в виде строки ~20 000+ символов)
а то обычный substring не работает, все зависает!!!
нужно вырезать начиная с "on the Web:" и + ещё 90 символов вперед.
как это сделать?

expl 18.03.2011 21:58

А что если это как набор байт в ByteArray загрузить и руками по байтам лазить?
(хотя сомнительно что-то, всего 20 000 символов и траблы уже появились)
Речь точно про AS3?

leo150 18.03.2011 22:37

сейчас попробую.
да, as3.0
Код AS3:

function onLoaded(evt:Event):void 
{
        var ansStr:String = new String();
        ansStr = myLoader.data;
        trace(ansStr = ansStr.substring(9000,9050));
}

---
не могли бы привести пример про ByteArray?

expl 18.03.2011 22:58

1. Надо прочитать в хелпе про загрузку бинарных данных с помощью URLLoader и загрузить текст как бинарник
2. Допустим он у нас есть
Код AS3:

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 на такой большой строке работают?
Может ими?

wvxvw 18.03.2011 23:54

Код AS3:

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 не существует. Не делайте так никогда - используйте литерал пустой строки (""), так и быстее, и не запутаете никого.

leo150 18.03.2011 23:58

все, решил проблему.
надо было перезагрузить cs5.
сижу с 12!

Код AS3:

var startIndex = ansStr.search("><li>")+5;
                var endIndex = startIndex + 90;
                trace(ansStr.slice(startIndex,endIndex));



Часовой пояс GMT +4, время: 14:22.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.