|
Столбец в строку
|
|||
---|---|---|---|
#18+
Имеется таблица, содержащая один столбец с данными (например целочисленных, записей скажем тысячи три), 1 2 3 4 100 ... ... нужно значения всех строк закинуть в буфер обмена в виде строки через какой-нибудь разделитель, скажем / (например 1/2/3/4/100/.....) Каким образом это сделать с максимальной производительностью? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2018, 22:27 |
|
Столбец в строку
|
|||
---|---|---|---|
#18+
Сделай цикл например через SCAN Или проблема в том. чтобы поместить в буфер обмена? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 03:49 |
|
Столбец в строку
|
|||
---|---|---|---|
#18+
сейчас сканом и делаю, предварительно выбрав необходимые уникальные записи в курсор (с преобразованием типа данных в текст), а потом скан. _ClipText='' SELECT in_buf SCAN FOR !EMPTY(zn) _ClipText=_ClipText+ALLTRIM(zn)+'/' ENDSCAN как видишь в этой версии строка помещается на каждом шаге в буфер обмена. А насколько это разумно не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 07:09 |
|
Столбец в строку
|
|||
---|---|---|---|
#18+
А есть проблема со скоростью / временем выполнения? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 08:20 |
|
Столбец в строку
|
|||
---|---|---|---|
#18+
Местами администратор... нужно значения всех строк закинуть в буфер обмена в виде строки через какой-нибудь разделитель, скажем / (например 1/2/3/4/100/.....) ... А насколько это разумно не знаю. Да, нужны серьезные обоснования такого решения) Но коли уж так, то скан самый разумный для фокса, по 150 причинам. Лаконично, понятно, быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 08:31 |
|
Столбец в строку
|
|||
---|---|---|---|
#18+
Местами администраторсейчас сканом и делаю, предварительно выбрав необходимые уникальные записи в курсор (с преобразованием типа данных в текст), а потом скан. _ClipText='' SELECT in_buf SCAN FOR !EMPTY(zn) _ClipText=_ClipText+ALLTRIM(zn)+'/' ENDSCAN как видишь в этой версии строка помещается на каждом шаге в буфер обмена. А насколько это разумно не знаю. Буфер обмена не надо как переменную использовать, лучше так Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 09:23 |
|
Столбец в строку
|
|||
---|---|---|---|
#18+
А разве у переменной не будет ограничение в 256 символов? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 11:42 |
|
Столбец в строку
|
|||
---|---|---|---|
#18+
982183А разве у переменной не будет ограничение в 256 символов? Нет. 16 Мб если не путаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 11:46 |
|
Столбец в строку
|
|||
---|---|---|---|
#18+
256 символов ограничение для строки в коде, т.е. так будет ошибка Код: sql 1.
а так нет Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 11:49 |
|
Столбец в строку
|
|||
---|---|---|---|
#18+
Странно. Всё время думал, что текстовые переменные имеют тип Character Произвольный текст. 1 байт на символ; до 254 байтов ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 12:08 |
|
Столбец в строку
|
|||
---|---|---|---|
#18+
982183Странно. Всё время думал, что текстовые переменные имеют тип Character Произвольный текст. 1 байт на символ; до 254 байтов Не путай переменные и поля таблиц. Поля типа Character до 254, переменные до 16 Мб ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 12:12 |
|
Столбец в строку
|
|||
---|---|---|---|
#18+
Да вроде не путаю "типы данных переменных" и "типы данных полей таблиц" А ссылку на документацию можно? А то всё имеющееся говорит обратное. http://vfp7.ru/Vfp/help/fox01230.htm Может дело в версии фокса? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 12:18 |
|
Столбец в строку
|
|||
---|---|---|---|
#18+
Там только про поля, про переменные просто не написали. Т.е. это ограничение DBF, а не фокса. Вот кусок хэлпа VFP9, в ранних версиях также Visual FoxPro System Capacities Fields Maximum size of character fields. 254 ... Miscellaneous Maximum # of characters per character string or memory variable. 16,777,184 ... Здесь тоже самое http://fox.wikis.com/wc.dll?Wiki~VisualFoxProLimits ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 12:33 |
|
Столбец в строку
|
|||
---|---|---|---|
#18+
Dima T, Да в общем то в переменную всегда и закидывал данные, и после обработки в буфер обмена (конечная цель - поместить данные в виде строки через разделитель в буфер обмена). А тут необходимость расширить функциональность классу возникла, ну и подумалось - почему бы обработку через буфер не делать. Кстати, а почему через буфер не желательно? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 13:15 |
|
Столбец в строку
|
|||
---|---|---|---|
#18+
Местами администраторКстати, а почему через буфер не желательно? Во-первых медленнее работает, во-вторых пользователь может что-нибудь в буфер скопировать во время работы цикла и будет каша. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 13:32 |
|
Столбец в строку
|
|||
---|---|---|---|
#18+
Местами администратор, Не знаю про "лисички", но в большинстве языков SQL это делается с помощью группировки. Надо и "лисички" проверить. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2018, 17:49 |
|
Столбец в строку
|
|||
---|---|---|---|
#18+
ShSergeно в большинстве языков SQL это делается с помощью группировки. Пример кода можно посмотреть ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2018, 21:02 |
|
Столбец в строку
|
|||
---|---|---|---|
#18+
Можно. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2018, 07:03 |
|
Столбец в строку
|
|||
---|---|---|---|
#18+
Dima T, Пардон, вопрос невнимательно прочитал. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2018, 07:21 |
|
Столбец в строку
|
|||
---|---|---|---|
#18+
Местами администраторИмеется таблица, содержащая один столбец с данными (например целочисленных, записей скажем тысячи три), 1 2 3 4 100 ... ... нужно значения всех строк закинуть в буфер обмена в виде строки через какой-нибудь разделитель, скажем / (например 1/2/3/4/100/.....) Каким образом это сделать с максимальной производительностью? Из экзотики 1. Если в качестве типа данных для этого поля используется тип Numeric, то физически в файле DBF число хранится как символьная строка. Т.е. для данного типа число 123 так физически и будет хранится как 3 символа "123" с ведущими пробелами Из этого следует, что можно просто открыть файл DBF как текстовый файл. Затем "отрезать" заголовок. А вот в качестве разделителя использовать служебный байт, в котором хранится признак удаленной записи. Можно предварительно сделать DELETE ALL, чтобы этот разделитель "проявился" Код: sql 1.
Есть тип поля это не Numeric и не Character, то можно предварительно выгрузить таблицу в старый формат через COPY TO ... TYPE FOX2X AS 866 2. При помощи COPY TO можно также выгрузить в текстовый файл. Поскольку у Вас один столбец, то разделителем будет два символа: перевод строки и возврат каретки. Т.е. Chr(13) + Chr(10) Код: sql 1. 2. 3.
Правда, формально, это не одна "строка", а много "строк". По одной строке на поле. Поскольку в качестве разделителя в этой "строке" будет именно перевод строк. У этой команды нет возможности изменить разделитель "строк" К сожалению, если такой "разделитель" не подходит, то замена разделителя "съест" весь выигрыш от быстрой выгрузки. Просто в FoxPro работа с большими текстовыми строками - это относительно медленная операция. Можно, конечно, поиграться с FOPEN()+FGETS(), но не уверен, что результат будет быстрее чем описанный ранее SCAN ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2018, 00:58 |
|
|
start [/forum/topic.php?fid=41&fpage=10&tid=1581780]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
25ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 145ms |
0 / 0 |