Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Подскажите, а как убрать все спец. символы - скобки, запятые, и прочее? кроме дефиса?
к примеру есть предложение переведенное на транслит, вместо пробелов нужно поставить дефис, а все остальные не нужные знакие - удалить?
Друзья, помогите разобраться в коде, который тут нашел. И, может, подредактировать под мои цели. Вот код:
Код:
string input = project.Variables["content2"].Value; // Исходный текст
var list = project.Lists["temp"]; // Список выходных строк
list.Clear(); // Очищаем список
int count = 10; // Количество строк
for (int i = 0; i < count; i++)
{
string pattern = @"^.{0,2800}(\.|\?|\!|\s)"; // где 2800 - максимальная длина выходных строк (в символах)
Match match = Regex.Match(input, pattern);
if (match.Success)
{
list.Add(match.Value.Trim());
input = input.Remove(0, match.Length);
}
}
project.Variables["content2"].Value = input;
На входе берется переменная с текстом внутри (большой объем). На выходе в списке 10 строк с порезанным на блоки контентом. И вот я думал здесь "0,2800" можно задать желаемый объем каждого блока в символах. А они получаются ну очень разными. Нельзя ли как-то задать минимальный и максимальный объем в символах?
На данный момент при каждом запуске разные блоки:
1_блок - 197симв, 2_блок - 475симв, 3_блок - 433симв, 4_блок - 199симв, 5_блок - 482симв, 6_блок - 201симв.
1_блок - 213симв, 2_блок - 453симв, 3_блок - 223симв, 4_блок - 412симв, 5_блок - 410симв, 6_блок - 287симв.
И все далеки от заданных 2800 символов.
Не помню кто автор этого кода, но большое ему спасибо! И заранее спасибо тому, кто поможет сделать результаты его работы более управляемыми.
- Чтобы этот код заработал надо получить строку, которая превышала бы 2800 символов
- Для этого, надо в начале собрать несколько строк, в одну строку
- После этого пытаться формировать блоки
- В content2 собрано, скажем 500 строк
- Их надо перемешать
- взять первые 15-20 строк
- объедить эти строки в одну строку
- после этого обрезать до нужного размера, сформировав блоки
- остаток добавить в content2
- далее цикл повторяется, берётся следующие 10-20 строк... и т.д.
- в конце проверять, есть ли ещё строки и влезают ли они в 2800 Length
- если не влезают закончить
Вопрос: кто-то может подсказать как правильно это реализовать?
- Чтобы этот код заработал надо получить строку, которая превышала бы 2800 символов
- Для этого, надо в начале собрать несколько строк, в одну строку
- После этого пытаться формировать блоки
- В content2 собрано, скажем 500 строк
- Их надо перемешать
- взять первые 15-20 строк
- объедить эти строки в одну строку
- после этого обрезать до нужного размера, сформировав блоки
- остаток добавить в content2
- далее цикл повторяется, берётся следующие 10-20 строк... и т.д.
- в конце проверять, есть ли ещё строки и влезают ли они в 2800 Length
- если не влезают закончить
Вопрос: кто-то может подсказать как правильно это реализовать?
Всё работает, но немножечко не так как надо.
Вся суть была в том, чтобы
1. разбивать на рандомные блоки string pattern = @"^.{1200,2800}(\.|\?|\!|\s)";
2. Записать каждый блок в разные переменные...
int len = 2800; - можно рандомно сделать?
string text = project.Variables["text"].Value;
Random num = new Random();
int len = num.Next(1200,2800);
List <string> list = Regex.Matches(text, @"[^.!?\r\n]+[.!?\r\n]+").Cast<Match>().Select(x=>x.Value.Trim()).ToList();
list.Shuffle();
string block = string.Empty;
List <string> blocks_list = new List<string>();
foreach (string sentence in list)
{
if ((block+" "+sentence).Length>len)
{
blocks_list.Add(block.Trim());
block = sentence;
}
else
{
block += " "+sentence;
}
}
blocks_list.Add(block);
return string.Join("\r\n", blocks_list);
Только заметил. В этом коде уже куда-то пропал блок с объявлением моего списка. Подскажите, как правильно его интегрировать обратно.
Так?
Код:
string text = project.Variables["content2"].Value;
var list = project.Lists["temp"]; // Список выходных строк
list.Clear(); // Очищаем список
Random num = new Random();
int len = num.Next(600,900);
List <string> list = Regex.Matches(text, @"[^.!?\r\n]+[.!?\r\n]+").Cast<Match>().Select(x=>x.Value.Trim()).ToList();
list.Shuffle();
string block = string.Empty;
List <string> blocks_list = new List<string>();
foreach (string sentence in list)
{
if ((block+" "+sentence).Length>len)
{
blocks_list.Add(block.Trim());
block = sentence;
}
else
{
block += " "+sentence;
}
}
blocks_list.Add(block);
return string.Join("\r\n", blocks_list);
1-й блок и 2-ой это кол-во символов в строке?
если я правильно понял,то как то так
Код:
Random num = new Random();
string text = project.Variables["text"].Value;
int i = 0;
int len = num.Next(600,900);//кол-во символов 1-я строчка
List <string> list = Regex.Matches(text, @"[^.!?\r\n]+[.!?\r\n]+").Cast<Match>().Select(x=>x.Value.Trim()).ToList();
list.Shuffle();
string block = string.Empty;
List <string> blocks_list = new List<string>();
foreach (string sentence in list)
{
if(i>=1){len = num.Next(1800,2800);}//кол-во символов со 2-й строчка
if ((block+" "+sentence).Length>len)
{
blocks_list.Add(block.Trim());
block = sentence;
}
else
{
block += " "+sentence;
}
i++;
}
blocks_list.Add(block);
return string.Join("\r\n", blocks_list);
1-й блок и 2-ой это кол-во символов в строке?
если я правильно понял,то как то так
Код:
Random num = new Random();
string text = project.Variables["text"].Value;
int i = 0;
int len = num.Next(600,900);//кол-во символов 1-я строчка
List <string> list = Regex.Matches(text, @"[^.!?\r\n]+[.!?\r\n]+").Cast<Match>().Select(x=>x.Value.Trim()).ToList();
list.Shuffle();
string block = string.Empty;
List <string> blocks_list = new List<string>();
foreach (string sentence in list)
{
if(i>=1){len = num.Next(1800,2800);}//кол-во символов со 2-й строчка
if ((block+" "+sentence).Length>len)
{
blocks_list.Add(block.Trim());
block = sentence;
}
else
{
block += " "+sentence;
}
i++;
}
blocks_list.Add(block);
return string.Join("\r\n", blocks_list);
Этот код у меня ошибок не выдает. Но и никуда не ложит результаты. Подскажите, что куда добавить, чтобы результаты легли в список "temp" или, как написал Valiksim сразу в переменные?
Уважаемые знатоки Буду Вам очень признателен за помощь с снипетом. Я пока до этих высот не дорос,а на кубиках уже вижу что решение займет по времени слишком долго перебирая все построчно.
Суть задачи,есть 2 таблицы tab1 и tab2
Алгоритм...
1.Нужно из tab2 взять из столбца А ячейка 1 значение
2.Сравнить его с tab1 А(весь столбец)
3.При полном сответствии записать в tab1 В ячейка 1 значение из tab2 В ячейка 1
и далее цикл tab2 ячейка+1 пока не закончатся данные в tab2 А
На скрине образно изложил суть...
Возможно я не правильно изложил алгоритм,может быстрее и проще считать весь столбец и как-то сравнить с другим,а после уже записывать. В общем мало знаний чтоб изложить как,но суть того что нужно надеюсь понятно обьяснил.
Заранее благодарен за помощь.
var table1 = project.Tables["Tab1"];
var table2 = project.Tables["Tab2"];
lock(SyncObjects.TableSyncer)
{
// цикл по количеству строк в Tab2
int iterCount1 = table2.RowCount;
for (int i = 0; i < iterCount1; i++)
{
string сell1 = table2.GetCell(0, i).Trim();
// цикл по количеству строк в Tab1
int iterCount2 = table1.RowCount;
for (int j = 0; j < iterCount2; j++)
{
string cell2 = table1.GetCell(0, j).Trim();
if (cell2 == сell1)
{
table1.SetCell(1, j, table2.GetCell(1, i).Trim());
}
}
}
}
Oleg_M Большое Вам спасибо! Даже не надеялся на такой быстрый ответ.
Все работает идеально,именно так как нужно было.
Уже по итогу пришло понимание того что данные и в первой и у второой таблице могут быть в других столбцах.
Можно реализовать указание отдельными переменными a1 b1(для tab1) и a2 b2(для tab2) в каком столбце данные находятся и с каким сравнивать и записывать соответственно?
где то был сниппет на аудиорекаптчу,который если ip в бане,не отправляет аудио на км2,тем самым не забивает лишний поток.Но потерял,у кого то есть под рукой?
var table1 = project.Tables["Tab1"];
var table2 = project.Tables["Tab2"];
// если данные динамичные, в проекте необходимо создать переменные: a1, b1, a2, b2 которые будут принимать соответствующие номера столбцов
// если данные статичные, можно заменить "int.Parse(project.Variables[…].Value)" на соответствующий номер столбца
// ВАЖНО!!! Нумерация столбцов начинается с нуля (A=0; B=1 и т.д)
int a1 = int.Parse(project.Variables["a1"].Value);
int b1 = int.Parse(project.Variables["b1"].Value);
int a2 = int.Parse(project.Variables["a2"].Value);
int b2 = int.Parse(project.Variables["b2"].Value);
lock(SyncObjects.TableSyncer)
{
// цикл по количеству строк в Tab2
int iterCount1 = table2.RowCount;
for (int i = 0; i < iterCount1; i++)
{
string сell1 = table2.GetCell(a2, i).Trim();
// цикл по количеству строк в Tab1
int iterCount2 = table1.RowCount;
for (int j = 0; j < iterCount2; j++)
{
string cell2 = table1.GetCell(a1, j).Trim();
if (cell2 == сell1)
{
table1.SetCell(b1, j, table2.GetCell(b2, i).Trim());
}
}
}
}
Oleg_M
Почему-то неработает последний код.
Я создал переменные a1 b1 a2 b2
В Tab1 у меня столбцы F G соответственно в переменных a1=5 b1=6
В Tab2 у меня столбцы A B соответственно в переменных a2=0 b2=1
В итоге у Tab1 должны заполнится данные ,а ничего не происходит.
В логах результат ОК и все.
Что я делаю не правильно и как нужно? Посмотрите пожалуйста код может там что-то не так?
Проверил, вроде все отрабатывает (проект во вложении).
Не знаю почему так, но чтобы увидеть результат работы, в windows нужно сначала закрыть папку с таблицей или нажать "назад",
а затем снова зайти и открыть таблицу, все будет.
Действительно глюк непонятно чего,через тотал комендер весь день смотрел и тыкался результата 0
Зашел как Вы предложили через мой компьютер открыл файл и все изменения видно.
И самое интересное что после этой процедуры все последующие изменения видно сразу без захода через мой компютер.
Еще раз спасибо Вам большое за помощь!
Подскажите вообще реально задать столбцу екселя формат?
Как в самом екселе есть формат ячеек числовой,общий текстовый и тд...
Если возможно пожалуйста дайте код,с возможностью указания переменной какому столбцу менять формат(на текстовый например)
Проблема вот в чем.. в исходном файле числа 31,5 например когда пишется в таблицу получается 31,5160
Может для сохранения изначального числа решение есть другое и я не туда смотрю?