Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Работа со String (http://www.flasher.ru/forum/showthread.php?t=137258)

metsys 09.03.2010 13:18

Работа со String
 
Есть String в которой занесены какие то данные.
Надо написать цикл который будет делать перенос на следующую строку через каждые 80 символов.
Как это сделать?

dmitry bond 09.03.2010 13:23

Код AS3:

for(var i:int = 0; i = 80,i = 160 и т.д.; i ++)
{
и пишете что такой та текст равен "<tr>"+ ваша строка ;
}


metsys 09.03.2010 13:37

Код AS3:

var stroka:String=new String();
stroka="Woke up and I feel like shit I don't remember last night, I'm getting sick of this I hit the bottle when I got off stage And got piss drunk stupid and went in a rage I think I mighta got into a fight Because my knuckles were bloody and I don't feel alright I hit the bottom and I don't even care Some say I'm going to hell but I'm already there Sick and tired of being sick and tired";
 
for(var i:int = 0; i = 80, i = 160; i ++)
{
    var st:String="<tr>"+stroka;
}

??????? не работает ... можно ещё раз для тупых? ...

dmitry bond 09.03.2010 13:39

ой , я ошибочку допустил , i = 80 && i =160

metsys 09.03.2010 13:45

ну как бы не совсем понятен принцип ... во первых там никак не может быть i = 80 && i =160 ибо в цикле одна и та же переменная в одном и том же шаге не может быть равна разным числам, ну по крайней мере в данном случае ... во вторых там должен бытиь знак равенства ... но опять же не совсем понятно как всё таки правильно организовать цикл.

wvxvw 09.03.2010 14:56

Код AS3:

var s:String = "12345123451234512345123451234512345";
var buf:Array/*String*/ = [];
var len:int = s.length;
var i:int = -5;
for (i = 0; i < len; i += 5)
{
        buf.push(s.substr(i, 5));
}
trace(buf.join("\r"));


xpymbl4 09.03.2010 15:11

Код AS3:

var str:String = "Woke up and I feel like shit I don't remember last night, I'm getting sick of this I hit the bottle when I got off stage And got piss drunk stupid and went in a rage I think I mighta got into a fight Because my knuckles were bloody and I don't feel alright I hit the bottom and I don't even care Some say I'm going to hell but I'm already there Sick and tired of being sick and tired";
var strResult:String = '';
var strTransfer:int = 80;
for (var i:int = 0; i < str.length; i ++) {
    strResult = strResult + str.charAt(i);
    if ((i % strTransfer == 0) && (i != 0)) {
          strResult = strResult + '\n';
          trace(i); //80, 160, 240, 320 ...
    }                       
}                       
trace(strResult); // Строки по 80 символов.

Добавлено через 2 минуты
Сорри, мой вариант будет медленнее :)

etc 09.03.2010 15:49

Код AS3:

var str:String = "Woke up and I feel like shit I don't remember last night, I'm getting sick of this I hit the bottle when I got off stage And got piss drunk stupid and went in a rage I think I mighta got into a fight Because my knuckles were bloody and I don't feel alright I hit the bottom and I don't even care Some say I'm going to hell but I'm already there Sick and tired of being sick and tired";
var r:RegExp = /(.{20})/g;
str = str.replace(r, '$1\n');
trace(str);

:D

metsys 09.03.2010 16:21

спасибо)

wvxvw 09.03.2010 18:20

Цитата:

Сообщение от etc (Сообщение 891917)
Код AS3:

var str:String = "Woke up and I feel like shit I don't remember last night, I'm getting sick of this I hit the bottle when I got off stage And got piss drunk stupid and went in a rage I think I mighta got into a fight Because my knuckles were bloody and I don't feel alright I hit the bottom and I don't even care Some say I'm going to hell but I'm already there Sick and tired of being sick and tired";
var r:RegExp = /(.{20})/g;
str = str.replace(r, '$1\n');
trace(str);

:D

Твой вариант не учитывает символы \r \n ;)

etc 09.03.2010 18:30

Цитата:

Сообщение от wvxvw (Сообщение 891961)
Твой вариант не учитывает символы \r \n ;)

Ну уж добить регулярку сами сможете, не?

wvxvw 09.03.2010 22:42

Регулярка всяко медленнее субстринга будет :)

etc 09.03.2010 23:33

Цитата:

Сообщение от wvxvw (Сообщение 891994)
Регулярка всяко медленнее субстринга будет :)

Зато короче :P
И врядли вы тут даже почувствуете медлительность, ну разве что когда мегабайты текста будете парсить.

dimarik 10.03.2010 00:15

Цитата:

Сообщение от etc (Сообщение 892003)
ну разве что когда мегабайты текста будете парсить.

Будем. И она тут подведёт :)

wvxvw 10.03.2010 00:57

Для мегабайтов AS3 не товарищ - уж если и делать то в Alchemy / HaXe.

dimarik 10.03.2010 01:37

А чем особым они помогут? Я помню ассемблерные вставки для sinclair basic, здесь также? Неужели можно тупо на асме реализовать проблемные места? Что за диво эти алхимики/хаксы? Тогда нахрена вообще AS? Давайте писать на... чемм там быстрее и не так тармознутее?

chabapok 10.03.2010 01:43

у стринга есть (если не путаю) slice или substr. Вот и выдирайте в цикле кусками по 80 симовлов и в другой target стринг копируйте.

как-то так
Код AS3:

var target = '';
for(var i=0; i<source.len/80;i++)
target += source.substr(i*80, 80)+'ваша строка';


wvxvw 10.03.2010 04:47

chabapok:
Могли бы и на первую страницу заглянуть :)

dimarik:
Ну так все от задачи зависит. Скажем, до Asm'a там далеко, но все-таки соптимизировать конкатенацию и вообще работу со строками (т.е. с массивами примитовов вообще) на уровне флешевого байткода еще как можно.
Т.е. например то, как написал chabapok для больших объемов информации делать не стоит т.как это будет дублировать строки при каждой конкатенации (на фоне этого многократный вызов геттера length - мелочь). А вообще - можно конкретно под конкатенацию заточить функцию так чтобы, например третий сверху регист хранил ссылку на часть, которую нужно скопировать, четвертый - на уже скопированую, ворой и первый - на инкремент и значение которое нужно добавить к инкременту - описать такую структуру на AS никак не получится т.как нам обязательно нужна ссылка, чтобы ее в регистр положить, а используя такой метод у нас этой ссылки не будет. В HaXe похожую штуку осуществляет StringBuf. Ну а в AS по бедности можно использовать массив, или самому лист написать, по скорости разницы скорее всего не будет между листом и массивом, но оба выиграют у конкатенации, если складывать нужно много строк.

EDIT: Но, опять же есть тривиальные решения, которые просто реализовать и они будут работать с вменяемой производительностью, и есть заведомо нехорошие. Ни один из предложеных выше вариантов не является заведомо плохим, поэтому как бы и спорить нет смысла. Но можно расшибится в лепешку и соптимизировать цикл с использованием небезопасных поинтеров, передачей значений "наугад" по адресу регистра или через джампы и т.п.
Писать на AS стоит потому, что писать и дебажить байткод дико сложно, но за простоту мы платим производительностью, т.как написать идеальный компилятор не возможно :)
Или то будет вот так:
http://xkcd.com/371/

etc 10.03.2010 08:09

Мне кажется вы немного того, если для разбиения строки на одинаковые куски собрались использовать байткод и прочую алхимию. Это всего лишь подтверждение либо тому, что вам делать нехрен, либо тому, что AS3 тормоз. (Насчет последнего не очень уверен)

wvxvw 10.03.2010 14:40

Ну так я ж говорю, что от задачи зависит - если тебе нужно в AIR перелопатить несколько сот (тысячь) текстовых файлов - я думаю, ты тоже бы задумался, а стоит ли немного допилить родные API - там разница по времени может очень приличная получиться. Ну и сам понимаешь, что тормоз не AS3, а то, что из него компилируют :)

dimarik 12.03.2010 01:23

На все сразу не спрошу, но на кое-что замкнуло

Цитата:

Писать на AS стоит потому, что писать и дебажить байткод дико сложно
Вот была бы сила!

Добавлено через 15 минут
Согласен с тем, что из компилятор творит с кодом "чудеса". А компьютеры все мощнеют и мощнеют, чтобы тот бред, который производят компиляторы интерпретаторов транслятора и прочей забавной ерунды был потоком байтиков, снедаемых регистрами проца. Процу пофиг. Он будет из года в год переваривать такие потоки быстрее. Но сам дух _программы_ останется. Она требовательна к ресурсам. Она тормозит ) Это аксиома.


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

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