Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.03.2011, 21:50
leo150 вне форума Посмотреть профиль Отправить личное сообщение для leo150 Найти все сообщения от leo150
  № 1  
Ответить с цитированием
leo150
[+3 17.03.11]

Регистрация: Feb 2011
Сообщений: 27
По умолчанию чтение из длинных строк

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

Старый 18.03.2011, 21:58
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 2  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
А что если это как набор байт в ByteArray загрузить и руками по байтам лазить?
(хотя сомнительно что-то, всего 20 000 символов и траблы уже появились)
Речь точно про AS3?


Последний раз редактировалось expl; 18.03.2011 в 22:01.
Старый 18.03.2011, 22:37
leo150 вне форума Посмотреть профиль Отправить личное сообщение для leo150 Найти все сообщения от leo150
  № 3  
Ответить с цитированием
leo150
[+3 17.03.11]

Регистрация: Feb 2011
Сообщений: 27
сейчас попробую.
да, as3.0
Код AS3:
function onLoaded(evt:Event):void 
{
	var ansStr:String = new String();
	ansStr = myLoader.data;
	trace(ansStr = ansStr.substring(9000,9050));
}
---
не могли бы привести пример про ByteArray?


Последний раз редактировалось leo150; 18.03.2011 в 22:45.
Старый 18.03.2011, 22:58
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 4  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
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 на такой большой строке работают?
Может ими?

Старый 18.03.2011, 23:54
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 5  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код 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 не существует. Не делайте так никогда - используйте литерал пустой строки (""), так и быстее, и не запутаете никого.
__________________
Hell is the possibility of sanity

Старый 18.03.2011, 23:58
leo150 вне форума Посмотреть профиль Отправить личное сообщение для leo150 Найти все сообщения от leo150
  № 6  
Ответить с цитированием
leo150
[+3 17.03.11]

Регистрация: Feb 2011
Сообщений: 27
все, решил проблему.
надо было перезагрузить cs5.
сижу с 12!

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


Последний раз редактировалось wvxvw; 19.03.2011 в 00:00.
Создать новую тему Ответ Часовой пояс GMT +4, время: 08:46.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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