БлогNot. Javascript: слить все строки текста в одну

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" width=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';
?>

теги: javascript textprocessing сервис php

28.11.2017, 12:58; рейтинг: 3736