powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Как разделить строку на 6 частей
22 сообщений из 22, страница 1 из 1
Как разделить строку на 6 частей
    #40116412
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня.

Имеется на выходе строка неопределенного размера + символов перевод строки.
Нужно при помощью JS разделить ее на 6 частей.
Нашел функцию:
Код: javascript
1.
2.
3.
4.
function splitChunks(string) {
    var regex = RegExp(".{1," + Math.ceil(string.length/6) + "}", 'g');
    return string.match(regex);
}


Отлично подходит если строка не содержит символов переводов строк...
Как перебороть ?

Спасибо.
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116414
voraa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valeriu,
Так попробуй
var regex = RegExp("(.|\r|\n){1," + Math.ceil(string.length/6) + "}", 'gm');
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116415
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voraa,
Спасибо.
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116419
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu
Имеется на выходе строка неопределенного размера + символов перевод строки.
Нужно при помощью JS разделить ее на 6 частей.
Нашел функцию
...

А просто в цикле порезать на 6 частей?
Наверняка работать будет быстрее...
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116488
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,
Буду рад пробовать.
Если не трудно скинь маленький примерчик

Спасибо
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116500
voraa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valeriu,
Так, например
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function splitChunks(s, n) {
	const ar = [];
	const l = (s.length / n) | 0;
	let k = 0;
	while (n-- > 0) {
		ar.push(s.slice(k, (n > 0)? k + l: s.length));
		k += l;
	}
	return ar
}
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116545
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voraa,

чёта букв много
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116546
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa
Наверняка работать будет быстрее...
А кто-то заметит эту разницу, например, между 0,01 и 0,005?
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116558
voraa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На самом деле способ с регулярными выражениями в принципе неверен.
Строку "0123456789" он разбивает на 5 частей по 2 символа в каждой.
Мой первый способ бьет на 6 частей, но они не равномерны по длине - пять строк по 1 символу и последняя - 5 символов
Вот так будет лучше

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function splitChunks(s, n) {
	const ar = [];
	const l = (s.length / n) | 0;
	let rest = s.length % n;
	let beg = 0;
	while (n-- > 0) {
		const end = beg + l + ((rest -- > 0)? 1 :0);
		ar.push(s.slice(beg, end))
		beg = end;
	}
	return ar;
}
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116615
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW
А кто-то заметит эту разницу, например, между 0,01 и 0,005?

Количество таких строк у всех разное...
И задачи бывают разные. Есть кто борется за оптимизацию и ночами не спит. ;)
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116619
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
чёта букв много

Вот букв поменьше...
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
const val = '123456'
alert(parts(val, 6))
function parts(val, n) {
	const a = []
	const k = Math.ceil(val.length / n)
	for (i = 0; i < n; i++) a[i] = val.substr(i * k, k)
	return a
}


Но не понятно как разбивать строки не кратные N (в нашем случае 6)?
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116620
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так работает одинаково.
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
const val = '1234567'
alert(parts(val, 6))
alert(splitChunks(val))

function parts(val, n) {
	const a = []
	const k = Math.ceil(val.length / n)
	for (i = 0; i < n; i++) {
		const p = val.substr(i * k, k)
		if (p === '') break
		a[i] = p
	}
	return a
}
function splitChunks(string) {
    var regex = RegExp(".{1," + Math.ceil(string.length/6) + "}", 'g');
    return string.match(regex);
}
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116622
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa, так всё таки:
Код: javascript
1.
2.
3.
4.
5.
<script type="application/dart">
      main() {
        ..........
      }     
    </script>


как сказано https://habr.com/ru/post/130064/
работает, с какими ЯП? и скрипт например питона сделает это в одну строку..................
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116623
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с другой стороны - головняк - подключение модулей, тот же re))
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116625
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофа , про dart я не понял вопроса... Он вроде никак к этой теме.

катастрофа
скрипт например питона сделает это в одну строку..................

Если бы у бабушки был бы член - она была бы дедушкой. (с) ;)

Т.ч. я могу только порадоваться за питон и не более того.
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116670
voraa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa
Вот так работает одинаково.
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
const val = '1234567'
alert(parts(val, 6))
alert(splitChunks(val))

function parts(val, n) {
	const a = []
	const k = Math.ceil(val.length / n)
	for (i = 0; i < n; i++) {
		const p = val.substr(i * k, k)
		if (p === '') break
		a[i] = p
	}
	return a
}
function splitChunks(string) {
    var regex = RegExp(".{1," + Math.ceil(string.length/6) + "}", 'g');
    return string.match(regex);
}


Они одинаково не работают
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116671
voraa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
катастрофа
krvsa, так всё таки:
скрипт например питона сделает это в одну строку..................

Приведи здесь скрипт питона, который это делает в одну строку.
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116691
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voraa
Они одинаково не работают

Напишу так - они показывают одинаковый результат.
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116694
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем, но кажется я неправильно изложил задачу...
Я дико извиняюсь.
Все отлично работает, но что я получаю ?
Конец каждой строки заканчивается переводом строки.
Я получаю обедненные строки определенной стандартной длины (6 штук), но кусок строки
может оказаться в первой обедненной строке, а конец уже во второй .
Как можно это все делать, но придерживаться, что каждая подстрока в обедненной строке
должна быть целой, те заканчиваться '\n'

Я пробовал на быструю руку весь текст преобразовать в массив, потом разделить на отдельные N массивов
Но работает очень мелено
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
function gon() { 
    let arr = editorUI.mirror.getValue().split('\n');
    const res = []; 
    for (let i = 0; i < arr.length; i += 400) { 
    const chunk = arr.slice(i, i + 400); 
    res.push(chunk); 
    } 
          for (var j = 0; j < res.length; j++) {
             for (k =0; k < res[j].length; k++) {
                //arrTAB[k] = res[j][k];   
                console.log(res[j][k]);    
            }
           //console.log(res[j]);   
        }
    //return res; 
    //console.log(res);
    } 



Спасибо.
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116719
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu , я пока не совсем понял как тебе нужно делить на "куски" твою строку...
Пока понятно что:
- Кусков должно быть 6
- Они должны быть как-то "равными"
- Конец каждой строки заканчивается переводом строки

Но тут уже много взаимоисключающих вариантов...
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116721
voraa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valeriu

Но работает очень мелено

Спасибо.


А медленно - это сколько?
И на каком объеме текста?
И сколько должно работать?

Вот эта функция на тексте длиной примерно 95000 символов (около 4000 строк) работает примерно 3мс (довольно старый AMD)
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
function splitChunks(s, n) {
	const lines = s.split('\n')
	const res = []
	const l = (s.length/n) | 0;
	let nl = 0;
	while (n-->0) {
		let ch = ''
		while (nl < lines.length) {
			if (ch.length + lines[nl].length < l) {
				ch += lines[nl++];
			} else {
				if (l - ch.length > lines[nl].length / 2) {
					ch += lines[nl++];
				}
				break;
			}
		}
		res.push(ch)
	}
	return res
}
...
Рейтинг: 0 / 0
Как разделить строку на 6 частей
    #40116729
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voraa,
Я думаю не больше 65000 ...
Вроде достаточно по скорости, я пробовал код.
Спасибо
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Как разделить строку на 6 частей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]