Бесплатные снипеты на заказ

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Подскажите, а как убрать все спец. символы - скобки, запятые, и прочее? кроме дефиса?
к примеру есть предложение переведенное на транслит, вместо пробелов нужно поставить дефис, а все остальные не нужные знакие - удалить?
C#:
string str = project.Variables["Text"].Value;
str = Regex.Replace(str, @"\s+", "-");
return Regex.Replace(str, @"[^\w\-]", "");
 

keltuzhaknut

Client
Регистрация
24.02.2016
Сообщения
221
Благодарностей
3
Баллы
18

evgen2208

Client
Регистрация
12.10.2016
Сообщения
130
Благодарностей
162
Баллы
43
А как вообще, в коде загрузка файлов на сайт осуществляется, когда диалоговое окно вылезает??
типа вот:




то что делает кубик "файлы для загрузки на сервер"

UPD: Решение нашел здесь http://zennolab.com/discussion/threads/uploading-file-via-flash-button.8181/#post50183 (результат получил, хотя и не понял как работает)

UPD2: А ларчик просто открывался.... instance.SetFilesForUpload(files);
 
Последнее редактирование:

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
Друзья, помогите разобраться в коде, который тут нашел. И, может, подредактировать под мои цели. Вот код:

Код:
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
- если не влезают закончить​
Вопрос: кто-то может подсказать как правильно это реализовать?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 641
Баллы
113
Попробовал код, и понял в чём ошибка а
- Чтобы этот код заработал надо получить строку, которая превышала бы 2800 символов
- Для этого, надо в начале собрать несколько строк, в одну строку
- После этого пытаться формировать блоки
- В content2 собрано, скажем 500 строк
- Их надо перемешать
- взять первые 15-20 строк
- объедить эти строки в одну строку
- после этого обрезать до нужного размера, сформировав блоки
- остаток добавить в content2
- далее цикл повторяется, берётся следующие 10-20 строк... и т.д.
- в конце проверять, есть ли ещё строки и влезают ли они в 2800 Length
- если не влезают закончить​
Вопрос: кто-то может подсказать как правильно это реализовать?
C#:
string text = project.Variables["text"].Value;
int len = 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);
 
  • Спасибо
Реакции: sipoku и Valiksim

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
C#:
string text = project.Variables["text"].Value;
int len = 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);
Всё работает, но немножечко не так как надо.
Вся суть была в том, чтобы
1. разбивать на рандомные блоки string pattern = @"^.{1200,2800}(\.|\?|\!|\s)";
2. Записать каждый блок в разные переменные...
int len = 2800; - можно рандомно сделать?
 
  • Спасибо
Реакции: sipoku

Sanekk

Client
Регистрация
24.06.2016
Сообщения
999
Благодарностей
389
Баллы
63
  • Спасибо
Реакции: Valiksim и sipoku

sipoku

Client
Регистрация
04.04.2010
Сообщения
266
Благодарностей
138
Баллы
43
Код:
Random num = new Random();
int len = num.Next(1200,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);
И теперь вся эта конструкция выдает ошибку: http://www.screencapture.ru/uploaded/fc/d3/b1/fcd3b1C5.jpg
 
Последнее редактирование:

Sanekk

Client
Регистрация
24.06.2016
Сообщения
999
Благодарностей
389
Баллы
63

Sanekk

Client
Регистрация
24.06.2016
Сообщения
999
Благодарностей
389
Баллы
63

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
да, вы верно вставили,работает?
Если вставить
Код:
var list = project.Lists["temp"]; // Список выходных строк
list.Clear(); // Очищаем список
и не объявлять список, работать не будет. Без этого - работает. надо добавить строку объявления списка

Ещё вопрос: как сделать так, чтобы 1-й блок был
Код:
Random num = new Random();
int len = num.Next(600,900);
а остальные побольше
Код:
Random num = new Random();
int len = num.Next(1200,2500);
 
Последнее редактирование:

Sanekk

Client
Регистрация
24.06.2016
Сообщения
999
Благодарностей
389
Баллы
63
Ещё вопрос: как сделать так, чтобы 1-й блок был
Код:
Random num = new Random();
int len = num.Next(600,900);
а остальные побольше
Код:
Random num = new Random();
int len = num.Next(1200,2500);
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);
p/s на работоспособность не тестил)
 
  • Спасибо
Реакции: Valiksim

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
Всё правильно понято

p/s на работоспособность не тестил)
Всё хорошо работает

Есть возможность сразу, каждый блок кидать в отдельные переменные? strBlock1, strBlock2, strBlock3, и так далее. Или их из Списка брать придётся?
 

sipoku

Client
Регистрация
04.04.2010
Сообщения
266
Благодарностей
138
Баллы
43
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);
p/s на работоспособность не тестил)
Этот код у меня ошибок не выдает. Но и никуда не ложит результаты. Подскажите, что куда добавить, чтобы результаты легли в список "temp" или, как написал Valiksim сразу в переменные?
 

сергос

Client
Регистрация
30.03.2015
Сообщения
27
Благодарностей
13
Баллы
3
Уважаемые знатоки Буду Вам очень признателен за помощь с снипетом. Я пока до этих высот не дорос,а на кубиках уже вижу что решение займет по времени слишком долго перебирая все построчно.
Суть задачи,есть 2 таблицы tab1 и tab2
Алгоритм...
1.Нужно из tab2 взять из столбца А ячейка 1 значение
2.Сравнить его с tab1 А(весь столбец)
3.При полном сответствии записать в tab1 В ячейка 1 значение из tab2 В ячейка 1
и далее цикл tab2 ячейка+1 пока не закончатся данные в tab2 А
На скрине образно изложил суть...
Возможно я не правильно изложил алгоритм,может быстрее и проще считать весь столбец и как-то сравнить с другим,а после уже записывать. В общем мало знаний чтоб изложить как,но суть того что нужно надеюсь понятно обьяснил.
Заранее благодарен за помощь.
 

Вложения

Последнее редактирование:

Oleg_M

Client
Регистрация
27.02.2015
Сообщения
72
Благодарностей
28
Баллы
18
Код:
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());
            }
        }
    }
}
 
  • Спасибо
Реакции: сергос

сергос

Client
Регистрация
30.03.2015
Сообщения
27
Благодарностей
13
Баллы
3
Oleg_M Большое Вам спасибо! Даже не надеялся на такой быстрый ответ.
Все работает идеально,именно так как нужно было.
Уже по итогу пришло понимание того что данные и в первой и у второой таблице могут быть в других столбцах.
Можно реализовать указание отдельными переменными a1 b1(для tab1) и a2 b2(для tab2) в каком столбце данные находятся и с каким сравнивать и записывать соответственно?
 
  • Спасибо
Реакции: Oleg_M

THE CaHeK

Client
Регистрация
29.01.2016
Сообщения
295
Благодарностей
115
Баллы
43
где то был сниппет на аудиорекаптчу,который если ip в бане,не отправляет аудио на км2,тем самым не забивает лишний поток.Но потерял,у кого то есть под рукой?
 

Oleg_M

Client
Регистрация
27.02.2015
Сообщения
72
Благодарностей
28
Баллы
18
Oleg_M Большое Вам спасибо!
Пожалуйста, рад был помочь.

Код:
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());
            }
        }
    }
}
 
  • Спасибо
Реакции: сергос

сергос

Client
Регистрация
30.03.2015
Сообщения
27
Благодарностей
13
Баллы
3
Oleg_M
Почему-то неработает последний код.
Я создал переменные a1 b1 a2 b2
В Tab1 у меня столбцы F G соответственно в переменных a1=5 b1=6
В Tab2 у меня столбцы A B соответственно в переменных a2=0 b2=1
В итоге у Tab1 должны заполнится данные ,а ничего не происходит.
В логах результат ОК и все.
Что я делаю не правильно и как нужно? Посмотрите пожалуйста код может там что-то не так?
 

Oleg_M

Client
Регистрация
27.02.2015
Сообщения
72
Благодарностей
28
Баллы
18
Что я делаю не правильно и как нужно? Посмотрите пожалуйста код может там что-то не так?
Проверил, вроде все отрабатывает (проект во вложении).
Не знаю почему так, но чтобы увидеть результат работы, в windows нужно сначала закрыть папку с таблицей или нажать "назад",
2017-05-25_20-25-02.png
а затем снова зайти и открыть таблицу, все будет.
 

Вложения

  • Спасибо
Реакции: сергос

redman

Client
Регистрация
11.03.2016
Сообщения
554
Благодарностей
178
Баллы
43
Как вырезать не по номеру, а последнее?

Код:
string str = project.Variables["Line"].Value;
var split = str.Split(':');

project.Variables["var"].Value = split[1];
 

сергос

Client
Регистрация
30.03.2015
Сообщения
27
Благодарностей
13
Баллы
3
Действительно глюк непонятно чего,через тотал комендер весь день смотрел и тыкался результата 0
Зашел как Вы предложили через мой компьютер открыл файл и все изменения видно.
И самое интересное что после этой процедуры все последующие изменения видно сразу без захода через мой компютер.
Еще раз спасибо Вам большое за помощь!
 
Последнее редактирование:
  • Спасибо
Реакции: Oleg_M

Oleg_M

Client
Регистрация
27.02.2015
Сообщения
72
Благодарностей
28
Баллы
18
  • Спасибо
Реакции: redman

сергос

Client
Регистрация
30.03.2015
Сообщения
27
Благодарностей
13
Баллы
3
Подскажите вообще реально задать столбцу екселя формат?
Как в самом екселе есть формат ячеек числовой,общий текстовый и тд...
Если возможно пожалуйста дайте код,с возможностью указания переменной какому столбцу менять формат(на текстовый например)
Проблема вот в чем.. в исходном файле числа 31,5 например когда пишется в таблицу получается 31,5160
Может для сохранения изначального числа решение есть другое и я не туда смотрю?
 
Последнее редактирование:

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
  • Спасибо
Реакции: сергос

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
  • Спасибо
Реакции: ks1989 и redman

NazarD

Client
Регистрация
05.04.2017
Сообщения
35
Благодарностей
0
Баллы
6

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113

NazarD

Client
Регистрация
05.04.2017
Сообщения
35
Благодарностей
0
Баллы
6

Кто просматривает тему: (Всего: 4, Пользователи: 0, Гости: 4)