Найти максимум в символьной строке

q1w1e1
Дата: 08.08.2012 10:32:32
есть символьное поле (А;FF,V и т.д. -это столбцы Excel), надо найти максимальное и сопоставить ему номер столбца (чертовы 16384 записей... в Import формата CSV нет, есть в Append from, но для него надо создать таблицу, следовательно надо узнать сколько полей, можно Fopen и подсчитать, но как всегд охота одной строкой и сразу..., может кто и знает)
Ввожу формулу
CALCULATE MAX(UPPER(ALLTRIM(n_col))), выдаёт V, когда максимальный столбец FF..
q1w1e1
Дата: 08.08.2012 10:39:02
тут подумал, может перейти из десятичной системы в 27(кол-во букв латинского алфавита), и уже в этой системе попробовать подсчитать..., а как перейти в VFP, из одной системы в другую..., блин в математике слаб...чувствуется тут должен стоять натуральный логарифм...
Dima T
Дата: 08.08.2012 10:41:26
Откуда фоксу знать что это закодированные числа?
Для сравнения строк "V" > "FF"
делай в два шага:
CALCULATE MAX(len(ALLTRIM(n_col))) to lnLen && Вычисляем макс.кол-во знаков
CALCULATE MAX(UPPER(ALLTRIM(n_col))) for len(ALLTRIM(n_col)) = lnLen
ВладимирМ
Дата: 08.08.2012 10:42:16
Надо добавить ведущий пробел для значений из одного символа.

CALCULATE MAX(UPPER(PADL(LTRIM(n_col),2)))
q1w1e1
Дата: 08.08.2012 10:43:02
спасибо...
IgorNG
Дата: 08.08.2012 10:45:12
q1w1e1
есть символьное поле (А;FF,V и т.д. -это столбцы Excel), надо найти максимальное и сопоставить ему номер столбца (чертовы 16384 записей... в Import формата CSV нет, есть в Append from, но для него надо создать таблицу, следовательно надо узнать сколько полей, можно Fopen и подсчитать, но как всегд охота одной строкой и сразу..., может кто и знает)
Ввожу формулу
CALCULATE MAX(UPPER(ALLTRIM(n_col))), выдаёт V, когда максимальный столбец FF..


А по-русски это как будет звучать: "есть символьное поле (А;FF,V и т.д. -это столбцы Excel), надо найти максимальное"
Что ты этой командой пытаешься подсчитать?
CALCULATE MAX(UPPER(ALLTRIM(n_col))), выдаёт V, когда максимальный столбец FF
Dima T
Дата: 08.08.2012 10:46:37
IgorNG
А по-русски это как будет звучать

Ответившие поняли :) попробуй догадаться
q1w1e1
Дата: 08.08.2012 10:50:08
Спасибо..., но как найденный максимум перевести в число.... ну типа А это 1, ff-это 162 столбец.. и т.д.
может через SQL запрос...с подзапросом....
ВладимирМ
Дата: 08.08.2012 11:19:56
q1w1e1
Спасибо..., но как найденный максимум перевести в число.... ну типа А это 1, ff-это 162 столбец.. и т.д.
может через SQL запрос...с подзапросом....

В принципе, можно поиграться ASCII-кодами, поскольку буквы латинского алфавита идут последовательно без разрывов.

For i=65 to 90
    ?i,Chr(i)
endfor


Соответственно, чтобы перевести ASCII-код в число надо просто вычесть 64.

lcColumn = 'FF'
?(ASC(substr(lcColumn,1,1))-64)*26 + (ASC(substr(lcColumn,2,1))-64)


Только гораздо проще создать таблицу (ну, или массив), и использовать поле таблицы или индекс массива. В смысле, выполнять поиск в этой служебной таблице нужной записи. Кстати, таблицу можно использовать в запросах, объединяя ее по Inner Join.

local lcLetter1, lcLetter2
create cursor ColumnExcel (colNum I, colLetter C(2))
for m.lnI = 1 to 255
    if m.lnI <= 26
        lcLetter1 = CHR(m.lnI + 64)
        lcLetter2 = ''
    else
        lcLetter1 = CHR(int(m.lnI/26) + 64)
        lcLetter2 = CHR(evl(mod(m.lnI,26),26) + 64)
    endif
    insert into ColumnExcel (colNum, colLetter) values (m.lnI, m.lcLetter1 + m.lcLetter2)
endfor

* Смотрим, что получилось
select ColumnExcel 
go top
browse
ВладимирМ
Дата: 08.08.2012 11:30:46
Универсальное преобразование через ASCII-коды будет выглядеть примерно так

lcColumn = 'FF'
?(ASC(left(padl(lcColumn,2,Chr(64)),1))-64)*26 + (ASC(right(lcColumn,1))-64)

lcColumn = 'A'
?(ASC(left(padl(lcColumn,2,Chr(64)),1))-64)*26 + (ASC(right(lcColumn,1))-64)

Хотя, повторюсь, удобнее использовать таблицу перекодировки.