Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Синтаксис Replace в Fox Pro  [new]
tanglir
Member

Откуда:
Сообщений: 28966
Dima T
APPEND BLANK зачем вставил? Убери все заработает как ты написал.
Только из моего кода надо убирать - в коде ТСа не хватает двух переходов по областям :)
11 фев 11, 07:55    [10217982]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
Dima T
Member

Откуда:
Сообщений: 15281
tanglir
Dima T
APPEND BLANK зачем вставил? Убери все заработает как ты написал.
Только из моего кода надо убирать - в коде ТСа не хватает двух переходов по областям :)

Не путай ТС, он и сам хорошо запутывается.
Я его код смотрел. Нормально там все с переходами. SCAN по таблице Blok, поиск и изменение в таблице p5080100.
11 фев 11, 08:20    [10218033]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
Chek_Fedor
Member

Откуда:
Сообщений: 2011
К моему сожалению мой код не работает как нужно т.е. после того как убрал APPEND... блоки вставляются только единожды
если находим p5080100.Pred>1 после "0" блок ставится следующий поставится только после повторения p5080100.Pred="0" и т.д.
Но вот то что мне предложили
sele 0 && переход в свободную рабочую область
USE c:\fpw26\plan1\p5080100.dbf EXCLUSIVE
sele 0
USE c:\fpw26\plan1\Blok.dbf EXCLUSIVE
select p5080100
scan for pred=1 && перебор всех записей в таблица1
select Blok
  go top
	locate for (p5080100.Kblok=Blok.blok5)
	if found()
 	sele p5080100
  APPEND BLANK
 	repl NBlok with Blok.NBL
	endif
endscan
работает если соответственно исключить APPEND BLANK и изменить условие pred=1 на pred>1
Спасибо.
11 фев 11, 10:31    [10218716]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
Chek_Fedor
Member

Откуда:
Сообщений: 2011
Нет желания засорять еще одной темой форум поэтому отпишу здесь
Есть возможность присвоить некой переменной значение типа String
т.е. убрать имя p5080100.dbf в переменную и использовать ее там где "нужно"
Predm="c:\fpw26\plan1\p5080100.dbf"
sele 0 && переход в свободную рабочую область
USE Predm EXCLUSIVE
не "прокатывает"
перед объявлением пробовал объявить как PUBLIC Predm
11 фев 11, 10:59    [10218929]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
tanglir
Member

Откуда:
Сообщений: 28966
Chek_Fedor,

это называется "макроподстановки", и это, по мнению многих, ЕстЬ АбсолютноеЪ ЗлоЪ.
Predm="c:\fpw26\plan1\p5080100.dbf"
sele 0 && переход в свободную рабочую область
USE &Predm EXCLUSIVE
В вфп можно ещё брать имя переменной в скобки, но не помню, работает ли это в фпд.
11 фев 11, 11:08    [10218999]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
Chek_Fedor
Member

Откуда:
Сообщений: 2011
Вот блин ни слова в книге об этом
11 фев 11, 11:14    [10219059]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
Dima T
Member

Откуда:
Сообщений: 15281
Chek_Fedor
Вот блин ни слова в книге об этом

& называется макроподстановка и в книге наверно есть.
Пользоваться макроподстановками желательно в тех случаях когда без них никак не обойтись.
Если есть другие варианты, то лучше не пользоваться, т.к. при активном использовании макроподстановок ошибки в программе искать очень сложно.
попробуй
USE (Predm) EXCLUSIVE
не уверен что 2.0 поймет, но в более старших версиях работает.
11 фев 11, 11:58    [10219463]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
fore5ta
Member

Откуда:
Сообщений: 51
Chek_Fedor
Но вот то что мне предложили

sele 0 && переход в свободную рабочую область
USE c:\fpw26\plan1\p5080100.dbf EXCLUSIVE
sele 0
USE c:\fpw26\plan1\Blok.dbf EXCLUSIVE
select p5080100
scan for pred=1 && перебор всех записей в таблица1
select Blok
  go top
	locate for (p5080100.Kblok=Blok.blok5)
	if found()
 	sele p5080100
  APPEND BLANK
 	repl NBlok with Blok.NBL
	endif
endscan
работает если соответственно исключить APPEND BLANK и изменить условие pred=1 на pred>1
Как я выше уже писал, в этом "работающем" по твоим словам коде заложено предположение о том, что в таблице BLOK.DBF есть все значения для поиска. Как только условие IF вернет false, то в приведенном тобой коде нет возврата в область перебора по SCAN.
11 фев 11, 12:01    [10219495]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
tanglir
Member

Откуда:
Сообщений: 28966
fore5ta
Как только условие IF вернет false, то в приведенном тобой коде нет возврата в область перебора по SCAN.
Я, конечно, мало что помню уже про фпд, но скан ведь сканит свою рабочую область, независимо от того, какая является активной, разве нет?
11 фев 11, 12:05    [10219534]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
Dima T
Member

Откуда:
Сообщений: 15281
tanglir
fore5ta
Как только условие IF вернет false, то в приведенном тобой коде нет возврата в область перебора по SCAN.
Я, конечно, мало что помню уже про фпд, но скан ведь сканит свою рабочую область, независимо от того, какая является активной, разве нет?

Правильно, всегда так было, SCAN работает в той области которая была на момент начала цикла, изменение рабочей области внутри скана никак не влияет на него, т.е. возвращаться в область скана ненужно.
11 фев 11, 12:12    [10219585]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
Dima T
Member

Откуда:
Сообщений: 15281
Chek_Fedor
К моему сожалению мой код не работает как нужно т.е. после того как убрал APPEND... блоки вставляются только единожды
если находим p5080100.Pred>1 после "0" блок ставится следующий поставится только после повторения p5080100.Pred="0" и т.д.
Но вот то что мне предложили
sele 0 && переход в свободную рабочую область
USE c:\fpw26\plan1\p5080100.dbf EXCLUSIVE
sele 0
USE c:\fpw26\plan1\Blok.dbf EXCLUSIVE
select p5080100
scan for pred=1 && перебор всех записей в таблица1
select Blok
  go top
	locate for (p5080100.Kblok=Blok.blok5)
	if found()
 	sele p5080100
  APPEND BLANK
 	repl NBlok with Blok.NBL
	endif
endscan
работает если соответственно исключить APPEND BLANK и изменить условие pred=1 на pred>1
Спасибо.

locate - довольно медленная команда, т.к. каждый раз перебирает все записи с начала до подходящей условию.
Если книга есть - почитай про использование индексов.
например если в таблице Blok есть индекс по полю blok5 с именем ix_blok5 то можно так написать:
sele 0
USE c:\fpw26\plan1\Blok.dbf EXCLUSIVE
set order to ix_blok5
sele 0
USE c:\fpw26\plan1\p5080100.dbf EXCLUSIVE
set relation to Kblok into Blok
repl for p5080100.pred>1 and p5080100.Kblok=Blok.blok5 NBlok with Blok.NBL
set relation to
PS locate for всегда с начала начинает, поэтому go top перед ним лишний.
11 фев 11, 14:31    [10221157]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
Chek_Fedor
Member

Откуда:
Сообщений: 2011
Посоветуйте справочную инфу. Опять вас мучить пришел. Как исключить дубликаты например по столбцу "X" for ....
11 фев 11, 15:05    [10221514]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
Dima T
Member

Откуда:
Сообщений: 15281
Chek_Fedor
Посоветуйте справочную инфу. Опять вас мучить пришел. Как исключить дубликаты например по столбцу "X" for ....

select X, count(*) as nCnt from MyTable group by X having nCnt > 1 into dbf tDoubleX
sele tDoubleX
scan
   ...
endscan
sele tDoubles
delete file tDoubleX.dbf 
думаю чего внутри скана писать сам догадаешься.
11 фев 11, 15:32    [10221761]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
Dima T
Member

Откуда:
Сообщений: 15281
По поводу литературы, если память не подводит, была неплохая книга Программирование в FoxPro 2.x автор Попов
11 фев 11, 15:36    [10221797]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
Юрий Р.
Member

Откуда:
Сообщений: 318
Кстати, советую обратить внимание на опцию IN команды REPLACE. Из личного опыта знаю, что если алиас, в котором делается замена значений полей, не активен, указания имени области в виде префикса (например: имя алиаса.имя поля) может оказаться недостаточно. Рекомендую всегда явно указывать имя алиаса в опции IN.

Простите, если вдруг "открыл Америку".
11 фев 11, 15:55    [10222037]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
Dima T
Member

Откуда:
Сообщений: 15281
Юрий Р.
Кстати, советую обратить внимание на опцию IN команды REPLACE. Из личного опыта знаю, что если алиас, в котором делается замена значений полей, не активен, указания имени области в виде префикса (например: имя алиаса.имя поля) может оказаться недостаточно. Рекомендую всегда явно указывать имя алиаса в опции IN.

Простите, если вдруг "открыл Америку".

Америку открыли гораздо позже, в FoxPro 2.x этого не было.
11 фев 11, 16:07    [10222160]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
Юрий Р.
Member

Откуда:
Сообщений: 318
Dima T,

Sorry! Не досмотрел.
11 фев 11, 17:09    [10222715]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Синтаксис Replace в Fox Pro  [new]
Илья_Кот
Guest
Господа помогите с вопросом. Мне необходимо заменить значение в столбце Gr_z на 'III' если выполняется условие, что F_h_1='M21.4' и Inv=1. Пробую такую конструкцию, но Fox ругается...REPLACE ALL Gr_z WITH 'III' FOR F_h_1='M21.4' AND Inv=1
15 янв 13, 17:23    [13773750]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
IgorNG
Member

Откуда: Москва
Сообщений: 956
Илья_Кот,

И как ругается? Матом?
15 янв 13, 17:45    [13773930]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
Илья_Кот
Guest
IgorNG,
почти матом. да еще и с вот таким знаком /. возможно в Foxe сложное условие выполнить с помощью команды replace? или чтото другое надо использовать?
15 янв 13, 17:49    [13773965]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
Ffffffffffffffff
Guest
Программисты обычно приводят текст сообщения.
15 янв 13, 18:02    [13774090]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
Илья_Кот
Guest
Ffffffffffffffff,

Operator/operand type mismatch.
15 янв 13, 19:20    [13774483]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1547
Илья_Кот
Ffffffffffffffff,

Operator/operand type mismatch.
Ну и что непонятно в этом сообщении? Откуда мысль
возможно в Foxe сложное условие выполнить с помощью команды replace?
? На чем она основана? На вере в свою безошибочность?
15 янв 13, 19:43    [13774548]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
Илья_Кот
Guest
Sergey Sizov,

омг...что ж вы тут все как звери...
Два вопроса. Оператор replace может выполнить сложное логическое условие или нет? Если да то как?
15 янв 13, 19:47    [13774560]     Ответить | Цитировать Сообщить модератору
 Re: Синтаксис Replace в Fox Pro  [new]
tanglir
Member

Откуда:
Сообщений: 28966
Илья_Кот, может, причём именно так, как и написано. Но вот здесь
Илья_Кот
F_h_1='M21.4' AND Inv=1
вы сравниваете первое поле со строкой, второе - с числом. А типы этих полей какие?
15 янв 13, 19:53    [13774573]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / FoxPro, Visual FoxPro Ответить