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

Сабж. Нужно учесть, что последний символ без завершающей запятой.
...
Рейтинг: 0 / 0
19.08.2014, 18:47
    #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
19.08.2014, 19:00
    #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
19.08.2014, 19:02
    #38723795
Ростигай
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
bazile,

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


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

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

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

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

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

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

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

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

Тык OleDbCommand так параметры принимает вестимо :)А воспользоваться OleDbDataAdapter'ом - не судьба?
...
Рейтинг: 0 / 0
20.08.2014, 14:13
    #38724519
sphinx_mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
sphinx_mvА воспользоваться OleDbDataAdapter'ом - не судьба?...и OleDbCommandBuilder 'ом...
...
Рейтинг: 0 / 0
20.08.2014, 14:53
    #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
20.08.2014, 15:05
    #38724604
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
Ростигай,

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

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

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

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

?

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

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

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



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



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

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

Хорошее решение для заданных условий задачи. Все читабельно и кратенько.
...
Рейтинг: 0 / 0
20.08.2014, 15:50
    #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
21.08.2014, 14:02
    #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
21.08.2014, 15:25
    #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
21.08.2014, 17:34
    #38725917
sphinx_mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
Ну, сейчас свеном на трехколесном лисапеде с квадратными колесами всех порвет... как тузик грелку...
cdtyjvВсе решения какие-то половинчатые и очень медленные. Показать вам нормальный и сверхбыстрый вариант? Смотрите:
Код: c#
1.
// skip-skip-skip
...
Рейтинг: 0 / 0
21.08.2014, 17:52
    #38725942
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
Вообще, по моему скромному, странная какая-то затея - морочиться оптимизацией генерации dml-строчки для запроса. Обычно накладные расходы на выполнение этого запроса, каким бы быстрым он ни был, на порядок больше.
...
Рейтинг: 0 / 0
21.08.2014, 18:40
    #38725995
cdtyjv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
sphinx_mv ,
Ну согласитесь, что мое решение самое крутое.
...
Рейтинг: 0 / 0
21.08.2014, 18:41
    #38725996
cdtyjv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
Сон Веры ПавловныВообще, по моему скромному, странная какая-то затея - морочиться оптимизацией генерации dml-строчки для запроса. Обычно накладные расходы на выполнение этого запроса, каким бы быстрым он ни был, на порядок больше.Ну учитывая то, что GC в .Net работает катастрофически медленно, а программистов приемлемого уровня, которые хоть краем уха слышали про что-то вроде gcServer раз-два и обчелся, подобного рода оптимизации не выглядят так уж избыточно.
...
Рейтинг: 0 / 0
21.08.2014, 19:42
    #38726031
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой самый простой способ получить строку из символов "?,?,?,?,..........?" ?
cdtyjvНу согласитесь, что мое решение самое крутое.
Неплохое, но не самое :-) Я бы назвал это примером избыточной оптимизации.

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

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


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