powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
25 сообщений из 30, страница 1 из 2
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38723779
Ростигай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.

Сабж. Нужно учесть, что последний символ без завершающей запятой.
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38723781
Ростигай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: c#
1.
2.
3.
4.
5.
6.
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < len; i++)
                {
                    sb.Append("?,");
                }
                return sb.ToString().Remove(len-1);



Вроде оптимизированно, но выглядит как-то не очень красиво.
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38723793
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ростигай, нормально выглядит. Надо только в конструктор StringBuilder длину строки передать, чтобы он сразу выделил char[] нужной длины. Также последний символ лучше удалять используя StringBuilder. Таком образом кол-во аллокаций будет меньше.
Код: c#
1.
2.
3.
4.
var sb = new StringBuilder(len*2);
for (int i = 0; i < len; i++) sb.Append("?,");
sb.Length -= 1;
return sb.ToString();
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38723795
Ростигай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bazile,

Спасибо ! Действительно так будет гораздо быстрее. Особенно трюк с "sb.Length -= 1". Про это не знал.
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38723809
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ростигай,
Код: c#
1.
2.
 var len = 10;
 Console.Write(string.Join(",", Enumerable.Repeat("?", len)));


зачем вам этот бред понадобился? гы
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38723813
Ростигай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи,

Спасибо. В принципе по короче, хотя вряд ли быстрее чем StringBuilder.

Тык OleDbCommand так параметры принимает вестимо :)
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38724144
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РостигайСпасибо. В принципе по короче, хотя вряд ли быстрее чем StringBuilder.
Проверять нужно. По той простой причине, что конкатенация 10 символов, где каждый символ - строка, может быть быстрее, чем в StringBuilder запихнуть 10 символов, и выполнить преобразование в строку.

К тому же экономить на спичках смысла нет - пишите код в первую очередь понятным.
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38724496
Ростигай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79,

Как раз, чтобы сделать код понятным и решил завернуть в какую-то функцию.

Ибо мне в одну DBF таблицу нужно загнать 17 полей, да и в других таблицах тоже полей много. Получаем строчку "?,?,?..." на кучу параметров. Такой код точно не читабелен.

Оставлю со стрингБилдером. Вполне наглядно.
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38724515
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РостигайГде-то в степи,

Спасибо. В принципе по короче, хотя вряд ли быстрее чем StringBuilder.

Тык OleDbCommand так параметры принимает вестимо :)А воспользоваться OleDbDataAdapter'ом - не судьба?
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38724519
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mvА воспользоваться OleDbDataAdapter'ом - не судьба?...и OleDbCommandBuilder 'ом...
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38724577
Ростигай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sphinx_mv,

Мне нужно вставить в DBF таблицу несколько строк.

Делаю так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
using (OleDbConnection connDBF = GetConnection(PathToFile))
using (OleDbCommand cmd = connDBF.CreateCommand())
            {                
                cmd.CommandText = @"INSERT INTO " + TableName + " (Field1, Field2....Field17) VALUES (" + MultiplyParams("?,", 17) + ")";

                connDBF.Open();
                foreach (XElement rec in Recs)
                {
                    cmd.Parameters.Clear();
                    AddParamToCommand(cmd, "Field1", rec.Element("Field1"), OleDbType.Date);
...



А данные из таблиц я считываю с помощью Dapper'а. Он возвращает IEnumerable<КлассСПолямиОтвета>. Итоговый код читабелен и короток.

Чем тут лучше Адаптеры и Датасеты? Я не фанат адаптеров, могу ошибаться.
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38724604
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ростигай,

Наличие такого множества параметров в запросе - это уже неудачный дизайн.
Ваши попытки обойтись без ОРМ и сократить строку запроса - несерьезны.

В случае поддержки такой системы (имею опыт) предпочтетельнее иметь полный текст запроса, без запуска программы и генерации строки с помощью дополнительных синтаксических функций - для возможности запустить этот запрос в SQL студии, например или в Toad....

Хочу сказать - раз уж вы не используете хибернейт и тому подобное - ну так и не используйте.
Ваши синтаксический хардкодинг - MultiplyParams("?,", 17 ) - это плохо.
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38724608
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ростигай,

Где тогда функция MultiplyFields("Field{0},", 17)

?

:-|
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38724645
Ростигай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
D129,

Все поля перечислены по именам, и там не Field1, Field2 а нормальные имена - поэтому и не написать под это дело универсальной функции.
А вот строчку для параметров да, захардкодил конкретным числом (17). Это читабельно. Нет нужды писать:

Код: c#
1.
2.
// Тут 24 параметра
"?,?,?.....?"



так ведь наглядней
Код: c#
1.
"...VALUES (" + MultiplyParams("?,", 24) + ")"



Есть и другие таблички, и там тоже захардкодено создание строчки для параметров.

Просто формат этих DBF таблиц не менялся 15 лет, и еще столько же не будет :) Так, что поддержки будет крайне мало.
Либо уж все изменится кардинально и уйдет в другие технологии, и тогда все равно код нужно будет переписывать с нуля.

Хорошее решение для заданных условий задачи. Все читабельно и кратенько.
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38724703
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ростигайsphinx_mv,
Мне нужно вставить в DBF таблицу несколько строк.
Делаю так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
using (OleDbConnection connDBF = GetConnection(PathToFile))
using (OleDbCommand cmd = connDBF.CreateCommand())
            {                
                cmd.CommandText = @"INSERT INTO " + TableName + " (Field1, Field2....Field17) VALUES (" + MultiplyParams("?,", 17) + ")";

                connDBF.Open();
                foreach (XElement rec in Recs)
                {
                    cmd.Parameters.Clear();
                    AddParamToCommand(cmd, "Field1", rec.Element("Field1"), OleDbType.Date);
...

А можно сделать как-то вот так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
    using (var connDBF = new OleDbConnection(ConnectionString))
    {
        connDBF.Open();
        var tbl = new DataTable();

        var adapterDBF = new OleDbDataAdapter("SELECT * FROM " + TableName, connDBF);
        adapterDBF.FillSchema(tbl, SchemaType.Source);
        var odcb = new OleDbCommandBuilder(adapterDBF);

        foreach (XElement rec in Recs)
        {
            tbl.Rows.Add(
                new[] {
                    rec.Element("Field1"),
                    ...
                    }
                );
        }

        adapterDBF.Update(tbl);

Что характерно - "букв меньше", и ни одной самописной функции не изобретено. :)
РостигайА данные из таблиц я считываю с помощью Dapper'а. Он возвращает IEnumerable<КлассСПолямиОтвета>. Итоговый код читабелен и короток.У Вас в ЭТОМ примере никакого Dapper'а не наблюдается...
РостигайЧем тут лучше Адаптеры и Датасеты? Я не фанат адаптеров, могу ошибаться.Все документировано. Все стандартно. Все ОЧЕНЬ универсально. И все - ТОЧНО работает... :)
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38725581
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ростигай
Код: c#
1.
2.
3.
4.
5.
6.
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < len; i++)
                {
                    sb.Append("?,");
                }
                return sb.ToString().Remove(len-1);



Вроде оптимизированно, но выглядит как-то не очень красиво.

Если уж идете таким путем, то я бы сделал так в одну строку:

Код: c#
1.
2.
   int count = 7;
   string result = string.Join(",", new string('?', count).ToCharArray());
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38725706
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все решения какие-то половинчатые и очень медленные. Показать вам нормальный и сверхбыстрый вариант? Смотрите:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
private const THRESHOLD = 64;
private static readonly string[] CACHE = new string[THRESHOLD];

static MyUtilityClass() 
{
    for (int i = 0; i < THRESHOLD ; i++) 
        arr[i] = GenerateString0(i);
}

public static GenerateString(int len) 
{
    return (len < THRESHOLD) ? CACHE[len] : GenerateString0(len);        
}

private static GenerateString0(int len) 
{
    if (len > 0)
    {
        StringBuilder sb = new StringBuilder("?", len * 2 - 1);

        for (int i = 1; i < len; i++)
            sb.Append(",?");

        return sb.ToString();
    }
    else
        return "";    
}
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38725917
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, сейчас свеном на трехколесном лисапеде с квадратными колесами всех порвет... как тузик грелку...
cdtyjvВсе решения какие-то половинчатые и очень медленные. Показать вам нормальный и сверхбыстрый вариант? Смотрите:
Код: c#
1.
// skip-skip-skip
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38725942
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, по моему скромному, странная какая-то затея - морочиться оптимизацией генерации dml-строчки для запроса. Обычно накладные расходы на выполнение этого запроса, каким бы быстрым он ни был, на порядок больше.
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38725995
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mv ,
Ну согласитесь, что мое решение самое крутое.
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38725996
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныВообще, по моему скромному, странная какая-то затея - морочиться оптимизацией генерации dml-строчки для запроса. Обычно накладные расходы на выполнение этого запроса, каким бы быстрым он ни был, на порядок больше.Ну учитывая то, что GC в .Net работает катастрофически медленно, а программистов приемлемого уровня, которые хоть краем уха слышали про что-то вроде gcServer раз-два и обчелся, подобного рода оптимизации не выглядят так уж избыточно.
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38726031
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvНу согласитесь, что мое решение самое крутое.
Неплохое, но не самое :-) Я бы назвал это примером избыточной оптимизации.

Такие фишки имеют смысл, если в программе постоянно исполняются скрипты с разным количеством параметров. Согласись, нечастое явление?

Чем плохо было в ресурсы шаблоны запросов загнать и получить их по идентификатору?
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38726091
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjv sphinx_mv ,
Ну согласитесь, что мое решение самое крутое.Экономить на спичках - ни разу не круто...
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38726094
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79cdtyjvНу согласитесь, что мое решение самое крутое.
Неплохое, но не самое :-) Я бы назвал это примером избыточной оптимизации.Не только избыточной, но и преждевременной.
Arm79Такие фишки имеют смысл, если в программе постоянно исполняются скрипты с разным количеством параметров. Согласись, нечастое явление?Классов таких приложений - ровно один: универсальный загрузчик данных из одного источника данных в другой.
Arm79Чем плохо было в ресурсы шаблоны запросов загнать и получить их по идентификатору?Сгенерировать любым способом непосредственно перед выполнением - и достаточно... Для одноразовой операции совершенно без разницы сколько долей процента экономии времени составляет применение разных способов реализации.
...
Рейтинг: 0 / 0
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
    #38726154
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ох...
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]