Дано: код на языке C Sharp (C#) (в моем случае на ASP.Net Core 2). Имеется строковая переменная, например, со следующим значением:
Строку разделили на массив строк при помощи функции SPLIT.
Задача: преобразовать исходную строку (или разделенный массив) в строку вида:
Т.е. убрать лишние пробелы около запятых, а также каждое значение обрамить в апострофы. Желательно сделать это одной строкой кода.
Предыстория: откуда задача - исходная строка (strExt) - это параметр приложения на ASP.Net Core 2, который задается администратором системы. На одной из веб-страниц приложения, заданной в формате RAZOR, нужно вставить данный параметр в JS-скрипт (javascript), который ajax'ом отправляет данные на сервер (конкретно - скрипт для загрузки файлов). Данный скрипт принимает параметры в определенном формате, указанном в задаче.
Просто замену запятой на запятую с апострофами сделать не получится, т.к. в исходной строке может стоять произвольное количество пробелов в разных местах (но не внутри слов). Поэтому легче всего сначала разделить эту строку на массив строк:
Теперь нужно снова собрать строку. Можно было бы, конечно, использовать функцию JOIN, например, так:
Но не произойдет урезание пробелов и будет примерно такой результат:
Поэтому используем функцию Aggregate, где указываем, как соединять строки и что нужно усечь пробелы:
На случай, если значение массива пустое, добавляем условие:
Где Tools.HasValue - любая ваша функция, проверяющая на отсутствующее значение.
Итак, итоговый результат в моем случае
На стороне сервера исходное значение в следующей переменной:
На стороне razor-странице указываю такую объединенную команду с добавлением открывающего и закрывающего апострофов:
В итоге в JS-скрипте получаю то, что нужно:
Конкретно в этом примере (где нет пробелов в разделяемых строках), можно использовать и упрощенный пример с заменой (удаляем все пробелы, делаем замену запятой на запятую с апострофом без преобразования в массив):
.Replace(" ", "").Replace(",", "', '")
Итоговая команда:
В таком решении не будет только проверки на пустые значения.
(с) Ella S.
string strExt = "pdf ,docx, xlsx,pptx, jpg, jpeg , png "
Строку разделили на массив строк при помощи функции SPLIT.
Задача: преобразовать исходную строку (или разделенный массив) в строку вида:
"'pdf', 'docx', 'xlsx', 'pptx', 'jpg', 'jpeg', 'png'"
Т.е. убрать лишние пробелы около запятых, а также каждое значение обрамить в апострофы. Желательно сделать это одной строкой кода.
Предыстория: откуда задача - исходная строка (strExt) - это параметр приложения на ASP.Net Core 2, который задается администратором системы. На одной из веб-страниц приложения, заданной в формате RAZOR, нужно вставить данный параметр в JS-скрипт (javascript), который ajax'ом отправляет данные на сервер (конкретно - скрипт для загрузки файлов). Данный скрипт принимает параметры в определенном формате, указанном в задаче.
Просто замену запятой на запятую с апострофами сделать не получится, т.к. в исходной строке может стоять произвольное количество пробелов в разных местах (но не внутри слов). Поэтому легче всего сначала разделить эту строку на массив строк:
var s1 = strExt.Split(',');
Теперь нужно снова собрать строку. Можно было бы, конечно, использовать функцию JOIN, например, так:
string s2 = String.Join ("', '", s1);
Но не произойдет урезание пробелов и будет примерно такой результат:
s2 = "'pdf ', 'docx', ' xlsx', 'pptx', ' jpg', ' jpeg ', ' png '"
Поэтому используем функцию Aggregate, где указываем, как соединять строки и что нужно усечь пробелы:
string s3 = s1.Aggregate((prev, current) => (prev + "', '" + current.Trim()));
На случай, если значение массива пустое, добавляем условие:
(Tools.HasValue(current.Trim()) ? prev + "', '" + current.Trim() : prev)
Где Tools.HasValue - любая ваша функция, проверяющая на отсутствующее значение.
Итак, итоговый результат в моем случае
На стороне сервера исходное значение в следующей переменной:
AppSettings.FileAllowedExtensions = "pdf ,docx, xlsx,pptx, jpg, jpeg , png ";
На стороне razor-странице указываю такую объединенную команду с добавлением открывающего и закрывающего апострофов:
@Html.Raw("'" + AppSettings.FileAllowedExtensions.Split(',') .Aggregate((prev, current) => ((Tools.HasValue(current.Trim()) ? prev + "', '" + current.Trim() : prev))) + "'")
В итоге в JS-скрипте получаю то, что нужно:
"'pdf', 'docx', 'xlsx', 'pptx', 'jpg', 'jpeg', 'png'"
Конкретно в этом примере (где нет пробелов в разделяемых строках), можно использовать и упрощенный пример с заменой (удаляем все пробелы, делаем замену запятой на запятую с апострофом без преобразования в массив):
.Replace(" ", "").Replace(",", "', '")
Итоговая команда:
@Html.Raw("'" + AppSettings.FileAllowedExtensions. Replace(" ", "").Replace(",", "', '") + "'")
В таком решении не будет только проверки на пустые значения.
(с) Ella S.
Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.
Комментариев нет :
Отправить комментарий