Javascript: слить все строки текста в одну
Просто понадобилось срочно из текста убрать переводы строк, ничем их не заменяя (точней, заменяя одним пробелом любое количество разделителей, в том числе, переводов строки). Такой формат нужен, например, при преобразовании pgn-файла в строку pgnString
для Chesstempo.
Пришлось написать кодик вроде вот такого, ведь сервисы nl2br и sus этого не делают. Но писать код на PHP, который ещё надо на сервак загрузить, мне сейчас лень, а на JS можно сделать за минуту, да и выполняется пусть вашим браузером, а не моим сервером :)
Вот скрипт в работе, а под катом - полный исходник, по сути, это маленькая обёртка над пользовательской функцией alltrim, удаляющей из строки лишние разделители.
<form name="multilineTextForm"> <p>Введите или вставьте текст:<br> <textarea name="multilineText" id="multilineText" rows="12" cols="80"></textarea> </p> <p> <input type="button" value="Обработать" onclick="doRemovingNl();"> <input type="button" value="Очистить" onclick="doClearNl();"> </p> <p>Результат: <input type="text" size="60" id="oneLineString" name="oneLineString"></p> </form> <script type="text/javascript"> function alltrim (p) { return p.replace (/\s+/g, ' ').replace(/(^\s*)|(\s*)$/g, ''); } function doRemovingNl () { let str = document.getElementById('multilineText').value; let arr = str.split("\n"); let result = ''; let len=arr.length; for (let i=0; i<len; i++) { //обработаем строки по одной - так экономичней let s = alltrim(arr[i]); if (s.length>0) result += s + ' '; } document.getElementById('oneLineString').value = alltrim(result); document.multilineTextForm.oneLineString.select(); } function doClearNl() { document.multilineTextForm.multilineText.value=''; document.multilineTextForm.oneLineString.value=''; } </script> <noscript>Нужен включённый Javascript для работы приложения</noscript>
В однострочном текстовом поле "Результат" достаточно нажать стандартные комбинации клавиш Ctrl+A
и затем Ctrl+C
чтобы скопировать получившуюся строку в Буфер Обмена.
Если Вы хотите решить обратную задачу - вынести каждое слово текста на отдельную строку, заодно избавившись от лишних разделителей и подсчитав количество слов в тексте, то загляните в эту заметку.
Для "слишком больших" по меркам JavaScript файлов можно применить показанное ниже решение на PHP, установив и настроив локальный сервер. Решение просто переписывает один файл в другой, удаляя переводы строк.
<?php if (!isset($_GET['in']) or !isset($_GET['out'])) die ("Please run me with 2 arguments (filenames): http://url?in=infile&out=outfile"); $infilename = htmlspecialchars(trim(basename($_GET['in']))); $outfilename = htmlspecialchars(trim(basename($_GET['out']))); $in = @fopen ($infilename,"r"); $out = @fopen ($outfilename,"w"); if ($in===false or $out===false) die ("Can't open '$infilename' or '$outfilename' file, please, check name(s)"); $buf = ''; do { $buf = fgets($in); if ($buf === false) break; fputs ($out,rtrim($buf,"\r\n")); } while (1); fclose ($out); fclose ($in); echo 'OK'; ?>
28.11.2017, 12:58 [36714 просмотров]