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

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

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

Регистрация: Mar 2008
Сообщений: 15
По умолчанию Удвоенные энтеры (переносы строк) при загрузке обычного многострочно текстового файла

Откуда берутся удвоенные переносы строк при загрузке обычного многострочного текстового файла?
Код приведен ниже, а файл можно сделать любой с именем 'Kyiv.txt' и кодировкой UTF-8 с несколькими строками текста.
Код:
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.events.IOErrorEvent;

var loader:URLLoader;

function URLLoader_loadExample() {
	var request:URLRequest = new URLRequest("Kyiv.txt");

	loader = new URLLoader();
	loader.dataFormat = URLLoaderDataFormat.TEXT;
	
	try {
		loader.load(request);
	}
	catch (error:SecurityError)
	{
		trace("A SecurityError has occurred.");
	}

	loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
	loader.addEventListener(Event.COMPLETE, loaderCompleteHandler);
}

function loaderCompleteHandler(event:Event):void {

		try {
			txt.text = loader.data;  // txt - текстовое поле
			trace(loader.data);
		} catch (e:TypeError) {
			trace("Could not parse the file.");
		}
}

function errorHandler(e:IOErrorEvent):void {
	txt.text = "Had problem loading the file.";
}
URLLoader_loadExample();

Старый 17.03.2008, 09:30
WindWalker вне форума Посмотреть профиль Отправить личное сообщение для WindWalker Найти все сообщения от WindWalker
  № 2  
Ответить с цитированием
WindWalker
[+1 18.03.08]

Регистрация: Nov 2006
Сообщений: 223
Он и символ с кодом 0D и символ с кодом 0A считает переносом.
Вот пример:
Код:
txt1.text = "Hello\nworld";
txt2.text = "Hello\r\nworld";
В первом случае нет пустой строки между словами (только \n).
Во втором случае есть (и \r и \n воспринимаются как переход на новую строку).

Таким образом, нужно провести дополнительную обрпботку - заменить все \r\n на \n.


Последний раз редактировалось WindWalker; 17.03.2008 в 09:32.
Старый 17.03.2008, 22:49
stringer2008 вне форума Посмотреть профиль Отправить личное сообщение для stringer2008 Найти все сообщения от stringer2008
  № 3  
Ответить с цитированием
stringer2008
[+3 17.06.08]

Регистрация: Mar 2008
Сообщений: 15
Попробовал вот так, и ничего не помогло:
Код:
function loaderCompleteHandler(event:Event):void {

	try {
		var str:String = loader.data;
		str = str.replace("\r\n","");
		txt.text = str;
		trace(str);
	} catch (e:TypeError) {
		trace("Could not parse the file.");
	}
}

Старый 17.03.2008, 23:18
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 4  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Код:
str.replace(/[\n\r]/g, ""); // удалит все символы \n и \r
Можете еще про TextField.condenseWhite почитать, если совсем переносы не нужны.


Последний раз редактировалось udaaff; 18.03.2008 в 02:11.
Старый 17.03.2008, 23:55
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Так вы удалить хотите все переносы или все-таки двойные? Вы внимательно прочитали второй пост?

Старый 18.03.2008, 00:45
stringer2008 вне форума Посмотреть профиль Отправить личное сообщение для stringer2008 Найти все сообщения от stringer2008
  № 6  
Ответить с цитированием
stringer2008
[+3 17.06.08]

Регистрация: Mar 2008
Сообщений: 15
Получилось!!!
Код:
function loaderCompleteHandler(event:Event):void {

	try {
		var str:String = loader.data;
		str = str.replace(/(\n\r|\n|\r)+/g,"\n");
		txt.text = str;
		trace(str);
	} catch (e:TypeError) {
		trace("Could not parse the file.");
	}
}

Старый 18.03.2008, 00:48
stringer2008 вне форума Посмотреть профиль Отправить личное сообщение для stringer2008 Найти все сообщения от stringer2008
  № 7  
Ответить с цитированием
stringer2008
[+3 17.06.08]

Регистрация: Mar 2008
Сообщений: 15
Хорошо, что я знаю регулярные выражения, я то долго мучался бы.
Точнее будет:
Код:
str = str.replace(/(\n\r|\n|\r){2}/g,"\n");
Adobe могли бы сделать что-то на этот случай, а то гониво получается. Кстати, за решение этой проблемы мне заплатит одна дизайн-студия $50.
Так что я рад Всем спасибо за внимание!


Последний раз редактировалось stringer2008; 18.03.2008 в 00:51.
Старый 18.03.2008, 00:55
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 8  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
str = str.replace(/\n\r?/g,"\n");

Старый 18.03.2008, 01:16
WindWalker вне форума Посмотреть профиль Отправить личное сообщение для WindWalker Найти все сообщения от WindWalker
  № 9  
Ответить с цитированием
WindWalker
[+1 18.03.08]

Регистрация: Nov 2006
Сообщений: 223
Кстати, очень долго колебался, как же всё-таки правильно: "\n\r" или "\r\n". Никак не мог вспомнить.
Интуиция подсказывала, что всё-таки "\n\r".
Здравый смысл ей вторил: сперва новая строка, а затем уже возврат каретки.

Однакось:
Код:
var s:String = "\n\r";
trace (s.charCodeAt(0));
trace (s.charCodeAt(1));
Выдаёт: 10 13
А в файлах (по крайней в винде), всегда идёт 13 10.
Так что "\r\n" - более правильно, хоть и почему-то режет глаз.

Старый 18.03.2008, 01:53
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
А если вспомнить обычную печатную машинку, то сначала делался возврат каретки (\r), потом перевод на новую строку (\n).

Создать новую тему Ответ Часовой пояс GMT +4, время: 11:14.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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