:: Visual Foxpro, Foxpro for DOS
посчитать символы CR в мемо-поле
glaz58

Сообщений: 812
Откуда: Воронеж
Дата регистрации: 09.02.2008
Уважаемые знатоки! В прикреплении упакованная таблица из двух полей. В memo-поле sostavrab текст, разделённый на строки символами CR-LF.
Я хочу посчитать сколько символов CR в мемо-поле с помощью следующих команд:
vs=ALLTRIM(sostavrab)
?LEN(vs)
COUNT FOR CHR(13) $ vs TO vc
?vc
На первый вопрос VFP отвечает, что длина мемо-поля 177 символов (я взял для примера первую строку), а на второй - 2087. То есть получилось, что в строке длиной 177 символов 2087 символов CR. Скорей всего, посчитано число символов CR во всех мемо-полях данной таблицы. Как можно корректно посчитать число символов CR в мемо-поле, без организации цикла?
Ratings: 0 negative/0 positive
Re: посчитать символы CR в мемо-поле
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
vc = OCCURS(chr(13), vs)
Ratings: 0 negative/0 positive
Re: посчитать символы CR в мемо-поле
ABB
Автор

Сообщений: 149
Откуда: Санкт-Петербург
Дата регистрации: 21.10.2006
Продолжаю тестировать нейросеть

/ask посчитать сколько символов CR в мемо-поле таблицы foxpro

ChatGPTBot, [05.02.2023 20:25]
Для подсчета символов CR в мемо-поле таблицы foxpro вы можете использовать следующий запрос SQL:

SELECT LEN(memofield) - LEN(REPLACE(memofield, CHAR(13), '')) AS CR_Count
FROM table_name;

Этот запрос вернет количество символов CR в мемо-поле таблицы. Прежде чем использовать его, убедитесь, что он дает правильные результаты.

/ask а можно использовать какую-либо функцию?

ChatGPTBot, [05.02.2023 20:35]
Да, вы можете использовать функцию FoxPro для подсчета символов CR в мемо-поле таблицы. Функция называется CRTOCOUNT() и принимает мемо-поле в качестве аргумента. Например, вы можете использовать следующий запрос:

SELECT CRTOCOUNT(memofield) AS CR_Count
FROM table_name;

Этот запрос вернет количество символов CR в мемо-поле таблицы. Прежде чем использовать его, убедитесь, что он дает правильные результаты.

/ask а можно без оператора select?

ChatGPTBot, [05.02.2023 20:37]
Да, вы можете использовать функцию FoxPro CRTOCOUNT() без оператора SELECT. Например, вы можете использовать следующую команду:

CRTOCOUNT(memofield)

Эта команда вернет количество символов CR в мемо-поле таблицы. Прежде чем использовать ее, убедитесь, что она дает правильные результаты.
Ratings: 0 negative/0 positive
Re: посчитать символы CR в мемо-поле
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Продолжай изучать "нейросеть"... Держи нас в курсе.

Кстати, GETWORDCOUNT (строка, разделитель) , когда разделитель = CHR(13)+CHR(10) работает замечательно, и символов-разделителей можно добавлять...

() hatС, [05.02.2023 20:35]
Да, вы можете использовать функцию FoxPro для подсчета символов CR в мемо-поле таблицы. Функция называется CRTOCOUNT() и принимает мемо-поле в качестве аргумента. Например, вы можете использовать следующий запрос:

SELECT CRTOCOUNT(memofield) AS CR_Count
FROM table_name;

Этот запрос вернет количество символов CR в мемо-поле таблицы. Прежде чем использовать его, убедитесь, что он дает правильные результаты.



... эта тварь, ИИ, что-то предлагает )



Исправлено 3 раз(а). Последнее : of63, 05.02.23 21:15
Ratings: 0 negative/0 positive
Re: посчитать символы CR в мемо-поле
ABB
Автор

Сообщений: 149
Откуда: Санкт-Петербург
Дата регистрации: 21.10.2006
Правда, CRTOCOUNT она придумала. А вот спросить я не успел, что это такое - меня отключили на сегодня
Ratings: 0 negative/0 positive
Re: посчитать символы CR в мемо-поле
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
glaz58
Скорей всего, посчитано число символов CR во всех мемо-полях данной таблицы.
Нет.
Команда COUNT считает не символы, а записи таблицы, то есть команда
COUNT FOR CHR(13) $ vs TO vc
вернула вам общее количество записей в таблице, так как для всех из них выражение CHR(13) $ vs вернет одно и то же значение (которое в вашем случае оказалось истинным)
Но мог получиться и ноль, если бы в текущей записи символов с кодом 13 не оказалось.

glaz58
Я хочу посчитать сколько символов CR в мемо-поле с помощью следующих команд:
Для этого необязательно предварительно "загонять" значение мемо в переменную и использовать ALLTRIM().
Эта команда выведет на экран таблицу количеств "переводов каретки" в поле sostavrab для каждой записи таблицы opisrab:
SELECT shifr, sostavrab, OCCURS(0h0D, sostavrab) AS k_cr FROM opisrab

А эта - общую сумму этих символов во всех записях таблицы:
SELECT SUM(OCCURS(0h0D, sostavrab)) AS k_cr_total FROM opisrab
Ratings: 0 negative/0 positive
Re: посчитать символы CR в мемо-поле
leonid

Сообщений: 3202
Откуда: Рига
Дата регистрации: 03.02.2006
akvvohinc
SELECT shifr, sostavrab, OCCURS(0h0D, sostavrab) AS k_cr FROM opisrab

С таким кодом порой могут возникнуть проблемы
SET SAFETY off
m.a=REPLICATE('1234',4000000) + CHR(13) +CHR(10)
STRTOFILE(m.a,"tmp.dat")
STRTOFILE(m.a,"tmp.dat",.t.)
m.b=FILETOSTR("tmp.dat")
ERASE ("tmp.dat")
CREATE CURSOR tmp (f1 m)
INSERT INTO tmp VALUES (m.b)
SELECT OCCURS(0h0D, f1) FROM tmp
Ratings: 0 negative/0 positive
Re: посчитать символы CR в мемо-поле
ABB
Автор

Сообщений: 149
Откуда: Санкт-Петербург
Дата регистрации: 21.10.2006
Нейросеть подсказала
SELECT COUNT(*) FROM table_name WHERE field_name LIKE '%\r\n%'
Небольшая модификация
SELECT COUNT(*) FROM tmp WHERE f1 like '%' + CHR(13) +CHR(10) + '%'
кажется работает
Ratings: 0 negative/0 positive
Re: посчитать символы CR в мемо-поле
leonid

Сообщений: 3202
Откуда: Рига
Дата регистрации: 03.02.2006
ABB
кажется работает

Только считает не то, что нужно.
Ratings: 0 negative/0 positive
Re: посчитать символы CR в мемо-поле
ABB
Автор

Сообщений: 149
Откуда: Санкт-Петербург
Дата регистрации: 21.10.2006
Выше приведенный пример считает правильно, правда, для варианта REPLICATE('1234',400000)
Ratings: 0 negative/0 positive
Re: посчитать символы CR в мемо-поле
leonid

Сообщений: 3202
Откуда: Рига
Дата регистрации: 03.02.2006
Выше приведенный пример правильно считает, сколько строчек в таблицы имеют мемо поле, в котором есть хотя бы один перенос строки. А ТС спрашивал посчитать, сколько переносов строки в каждом мемо поле.
Ratings: 0 negative/0 positive
Re: посчитать символы CR в мемо-поле
ABB
Автор

Сообщений: 149
Откуда: Санкт-Петербург
Дата регистрации: 21.10.2006
Согласен, тогда смотрим выше первый ответ ИИ

SELECT LEN(memofield) - LEN(REPLACE(memofield, CHAR(13), '')) AS CR_Count
FROM table_name;

Корректируем немного
SELECT LEN(f1) - LEN(strtran(f1, 0h0D, '')) AS CR_Count FROM tmp

Ограничение по длине строки - увы, это врожденное
Ratings: 0 negative/0 positive
Re: посчитать символы CR в мемо-поле
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
..не ответ на конкретный пост, а в приципе про ИИ и нейрох.ню.
Еб@нутая тема. Апологетов и продвиженцев надо сжигать в топках аги прокладки от сифозных проституток.
Ratings: 0 negative/0 positive
Re: посчитать символы CR в мемо-поле
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
leonid
С таким кодом порой могут возникнуть проблемы
А как бы вы объяснили этот "эффект"?
Похоже, что функция по-разному работает для строк и memo-полей - очень длинные строки "берёт", а memo - нет.
Ratings: 0 negative/0 positive
Re: посчитать символы CR в мемо-поле
ABB
Автор

Сообщений: 149
Откуда: Санкт-Петербург
Дата регистрации: 21.10.2006
Не понял столь эмоциональной реакции.
Я даже не пытался вдумываться в задачу - просто написал текст темы.
Первый ответ решил поставленную задачу. Что не так?
Давайте вспомним молодость и будем писать на ассемблере - языки программирования это зло.
Ratings: 0 negative/0 positive
Re: посчитать символы CR в мемо-поле
ABB
Автор

Сообщений: 149
Откуда: Санкт-Петербург
Дата регистрации: 21.10.2006
Я посмотрел для следующих функций:
strtran
like
OCCURS
слишком длинная строка
Ratings: 0 negative/0 positive
Re: посчитать символы CR в мемо-поле
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
ABB
Ограничение по длине строки - увы, это врожденное
Ограничений на длину строки у Фокса практически нет - только память.
Но не любым способом (функцией) можно создать строку максимально возможной длины в данных условиях.

Но в данном примере OCCURS() не хочет работать с memo при некоторой длине, а со строкой той же длины работать будет.
Другое дело, что загнать memo такой длины в строку обычным присвоением тоже не получится.



Исправлено 1 раз(а). Последнее : akvvohinc, 06.02.23 20:03
Ratings: 0 negative/0 positive
Re: посчитать символы CR в мемо-поле
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
ABB
Не понял столь эмоциональной реакции.
Не принимай близко. Я бываю порой горяч. Ну это не тема для тёрок.
Ratings: 0 negative/0 positive
Re: посчитать символы CR в мемо-поле
leonid

Сообщений: 3202
Откуда: Рига
Дата регистрации: 03.02.2006
akvvohinc
А как бы вы объяснили этот "эффект"?

Функция occurs очень длинные строки берет, но когда в параметры этой функции передать мемо поле, то фокс пытается создать виртуальную переменную, и загнать в нее значение мемо поля, а затем передать эту переменную функции. Вот в этот момент и срабатывает ограничение в 16 Мb. Кстати, если написать
m.c = f1
?occurs(0h0D, m.c)
то никакой ошибки не будет, но occurs посчитает только те 0h0D, которые встретятся в первых 16 Мb.
Вот такое странное поведение у фокса.
Ratings: 0 negative/0 positive
Re: посчитать символы CR в мемо-поле
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
leonid
Кстати, если написать
m.c = f1
?occurs(0h0D, m.c)
то никакой ошибки не будет, но occurs посчитает только те 0h0D, которые встретятся в первых 16 Мb.

У ТС так и было, сначало в переменную.

А 16Мб
Фигасе 8000 страниц текста в одном мемо поле? Чуть ли не всего Толстого можно запихарить.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 13 (Гостей: 13)

© 2000-2024 Fox Club 
Яндекс.Метрика