Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   обработка Asом текста Xml документа (http://www.flasher.ru/forum/showthread.php?t=67424)

inspace 02.08.2005 21:14

обработка Asом текста Xml документа
 
Уважаемые, следующий вопрос возник.
Импортирую XML документ в Dynamic Text. Строка отображающяяся в текстовом поле имеет длину xml строки. Переход на следующую строку в xml отображается как пропуск строки. Как грамотно отображать текст?

KidsKilla 02.08.2005 21:16

а?
ничего не понял. у тебя лишние переводы строк, что-ли?

inspace 02.08.2005 21:18

ага =))

KidsKilla 02.08.2005 21:23

XML.ignoreWhite = true;

KidsKilla 02.08.2005 21:26

или так:
function trim(txt){
while(txt.charCodeAt(0)<33) txt = txt.substs(1, txt.length);
while(txt.charCodeAt(txt.length-1)<33) txt = txt.substs(0, txt.length-1);
return txt;
}
my_txt = trim(" то что нужно \n \t ");

inspace 02.08.2005 21:27

уж есть. не помогает =))

KidsKilla 02.08.2005 21:28

если ты про двойные переводы строк внутри текста, то напишу как приеду домой.

inspace 02.08.2005 21:34

ок. жду.

iNils 02.08.2005 23:06

попробуй как в примере:
Код:

String.prototype.replace = function (findWhat, replaceWith) {
        if (findWhat != undefined and findWhat != "") {
                this = (this.split (findWhat)).join (replaceWith);
        }
        return this;
};
d = "1\n\n2";
trace (d);
f=d.replace ("\n\n", "\n");
trace (f);


KidsKilla 03.08.2005 02:12

вариант посовершеннее
Код:

function killNewlines(txt){
        var newTxt:String = "";
        var flag:Boolean = false;
        var v:String;
        for(var i = 0; i<txt.length; i++){
                v = txt.charAt(i);
                if(txt.charCodeAt(i)>33) {
                        newTxt += v;
                        flag = false;
                } if((v == "\n" || v == "\r")&&!flag){
                        flag = true;
                        newTxt += "\n";
                }
        }
        return newTxt
}
trace(killNewlines("первая строка\n  \t\r\nвторая строка"));


iNils 03.08.2005 02:15

а чем он совершеннее? :)

KidsKilla 03.08.2005 02:48

тем что прокатывают даже такие строки:
Код:

"xxx\n        \nxxx"
// и такие:
"xxx    \n\n      xxx"
// и такие:
"xxx\n\r\r\n\n\n\n\rxxx"


iNils 03.08.2005 11:40

мой пример является примером обыкновенной замены символов.
твой, убиранием в последовательности строк форматирования всех символов кроме одного.
но если требуется обработать простую замену, твоя функция в работает в 10-12 раз медленее.

inspace 03.08.2005 13:41

огромное спасибо =))

KidsKilla 03.08.2005 14:23

2inspace огромное пожалуйста =)

2 iNils это ф-ция для конкретной задачи -- убирания повторяющихся, в том числе пробельных строк, а не "убиранием в последовательности строк форматирования всех символов кроме одного". она удаляет строки как в формате юникса, так и виндовом. если, к примеру в тексте встретится конструкция вида:
"текст

текст"
где в средней строке затесался пробел (что часто бывает при копи-пейсте), то твоя ф-ция не удалит такую последовательность, а моя удалит.
конечно, она несравнимо медленнее, но более универсальна.
словом, выбор за автором.

iNils 03.08.2005 14:32

повторяющихся? то есть в последовательности убирается дубликаты?

KidsKilla 03.08.2005 14:41

кстати вариант ускоренный на 35%, мо медленнее 1го в 14 =))) раз:
Код:

function killNewlines(txt){
        var newTxt = "";
        var flag = false;
        var i = txt.length;
        while(i--){
                if(txt.charCodeAt(i)>33) {
                        newTxt += txt.charAt(i);
                        flag = false;
                        continue;
                } else if(!flag&&(txt.charAt(i) == "\n" || txt.charAt(i) == "\r")){
                        newTxt += newline;
                        flag = true;
                        continue;
                }
        }
        return newTxt
}

блин, не так сказал, дубликаты не киляются. пустые киляются.
\n\n\n становится \n
\n\n тоже \n
а у тя \n\n\n станет \n\n (что, по сути, баг)
вот в этом преимущество...


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

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