Форум 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=109566)

stringer2008 17.03.2008 01:59

Удвоенные энтеры (переносы строк) при загрузке обычного многострочно текстового файла
 
Откуда берутся удвоенные переносы строк при загрузке обычного многострочного текстового файла?
Код приведен ниже, а файл можно сделать любой с именем '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();


WindWalker 17.03.2008 09:30

Он и символ с кодом 0D и символ с кодом 0A считает переносом.
Вот пример:
Код:

txt1.text = "Hello\nworld";
txt2.text = "Hello\r\nworld";

В первом случае нет пустой строки между словами (только \n).
Во втором случае есть (и \r и \n воспринимаются как переход на новую строку).

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

stringer2008 17.03.2008 22:49

Попробовал вот так, и ничего не помогло:
Код:

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.");
        }
}


udaaff 17.03.2008 23:18

Код:

str.replace(/[\n\r]/g, ""); // удалит все символы \n и \r
Можете еще про TextField.condenseWhite почитать, если совсем переносы не нужны.

etc 17.03.2008 23:55

Так вы удалить хотите все переносы или все-таки двойные? Вы внимательно прочитали второй пост?

stringer2008 18.03.2008 00:45

Получилось!!!
Код:

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.");
        }
}


stringer2008 18.03.2008 00:48

Хорошо, что я знаю регулярные выражения, я то долго мучался бы.
Точнее будет:
Код:

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

BlooDHounD 18.03.2008 00:55

str = str.replace(/\n\r?/g,"\n");

WindWalker 18.03.2008 01:16

Кстати, очень долго колебался, как же всё-таки правильно: "\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" - более правильно, хоть и почему-то режет глаз.

etc 18.03.2008 01:53

А если вспомнить обычную печатную машинку, то сначала делался возврат каретки (\r), потом перевод на новую строку (\n).


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

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