Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Неработает код для форматирования текста (https://javascript.ru/forum/misc/23307-nerabotaet-kod-dlya-formatirovaniya-teksta.html)

Ukrainian 19.11.2011 19:48

Неработает код для форматирования текста
 
Я недавно начал изучать JavaScript и у меня возникла проблема.

Нужно чтобы в полученном тексте строки были не больше 20 символов
я написал вот такой код:
str = prompt('Введите текст.','');
nstr = [];
a = 0; //номер ячейки
b=20; //условие для перехода на новую строку

for (i=0; i<str.length; i++)
{
    if (i > b) {a+=1; b+=20;};
    nstr[a] =  nstr[a] + charAt(i);
}

document.write(nstr.join('<br>'));

//каждая новая строка записывается в новую ячейку массива nstr

но этот код не работает.

trikadin 19.11.2011 19:54

Цитата:

Сообщение от Ukrainian
nstr[a] = nstr[a] + charAt(i)

Проблема в этой строчке. charAt(i) - это метод строки, и должен вызываться у строки. И у строки есть хороший метод substr, попробуйте использовать его.

Ukrainian 19.11.2011 19:59

Спасибо, сейчас попробую.

Ukrainian 19.11.2011 20:14

Всеравно не работает:
str = prompt('Введите текст.','');
nstr = [];
a = 0; //номер ячейки
b=20; //условие для перехода на новую строку

for (i=0; i<str.length; i++)
{
    if (i > b) {a+=1; b+=20;};
    nstr[a] += str.substr(i, 1);
}

document.write(nstr.join('<br>'));

Ukrainian 19.11.2011 20:19

Хотя нет кажется я понял.

Ukrainian 19.11.2011 20:29

Вот нужно заменить:
for (i=0; i<str.length; i++) 
{ 
if (i > b) {a+=1; b+=20;}; 
nstr[a] =  nstr[a] + charAt(i); 
}

на:
for (i=0; i++)
{
nstr[i] = str.substr(i * 20, 20);
if (nstr[i] = "") {break};
}

Ukrainian 19.11.2011 20:36

Всеравно не работает(

trikadin 19.11.2011 20:46

str="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
lines_num= Math.floor(str.length/20) + (str.length%20 ? 1 : 0);// вычисляем кол-во строк
arr=[];
for (var i=0; i!= lines_num; ++i) {
 arr.push(str.substring(i*20, (i+1)*20));
};
alert(arr.join("\n"));


Хотя лучше регулярками:
str="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
alert(str.match(/[\s\S]{0,20}/g).join("\n"));


UPD: Упс, ошибка вышла. Поправил регулярку.
UPD: Правильнее использовать Math.floor.

Ukrainian 19.11.2011 22:50

А что неправильно в моем варианте?
Что за Math.round?
И что за регулярки?

trikadin 19.11.2011 23:02

Цитата:

Сообщение от Ukrainian
А что неправильно в моем варианте?

Он не работает)) Это главная ошибка. А вообще, ошибка в этой строчке:
nstr[i] = str.substr(i * 20, 20);

Вы берёте символы от i*20 до 20-ти. Это не есть правильно.
Цитата:

Сообщение от Ukrainian
Что за Math.round?

Округление
Цитата:

Сообщение от Ukrainian
И что за регулярки?

Регулярные выражения

И вообще-то поиск есть.


Часовой пояс GMT +3, время: 03:03.