powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Синтаксис Replace в Fox Pro
25 сообщений из 58, страница 2 из 3
Синтаксис Replace в Fox Pro
    #37110485
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TAPPEND BLANK зачем вставил? Убери все заработает как ты написал.Только из моего кода надо убирать - в коде ТСа не хватает двух переходов по областям :)
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #37110499
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirDima TAPPEND BLANK зачем вставил? Убери все заработает как ты написал.Только из моего кода надо убирать - в коде ТСа не хватает двух переходов по областям :)
Не путай ТС, он и сам хорошо запутывается.
Я его код смотрел. Нормально там все с переходами. SCAN по таблице Blok, поиск и изменение в таблице p5080100.
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #37110721
Chek_Fedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К моему сожалению мой код не работает как нужно т.е. после того как убрал APPEND... блоки вставляются только единожды
если находим p5080100.Pred>1 после "0" блок ставится следующий поставится только после повторения p5080100.Pred="0" и т.д.
Но вот то что мне предложили
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
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
Спасибо.
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #37110787
Chek_Fedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет желания засорять еще одной темой форум поэтому отпишу здесь
Есть возможность присвоить некой переменной значение типа String
т.е. убрать имя p5080100.dbf в переменную и использовать ее там где "нужно"
Код: plaintext
1.
2.
3.
Predm="c:\fpw26\plan1\p5080100.dbf"
sele  0  && переход в свободную рабочую область
USE Predm EXCLUSIVE
не "прокатывает"
перед объявлением пробовал объявить как PUBLIC Predm
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #37110799
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chek_Fedor,

это называется "макроподстановки", и это, по мнению многих, ЕстЬ АбсолютноеЪ ЗлоЪ.
Код: plaintext
1.
2.
Predm="c:\fpw26\plan1\p5080100.dbf"
sele  0  && переход в свободную рабочую область
USE &Predm EXCLUSIVE
В вфп можно ещё брать имя переменной в скобки, но не помню, работает ли это в фпд.
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #37110817
Chek_Fedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот блин ни слова в книге об этом
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #37110929
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chek_FedorВот блин ни слова в книге об этом
& называется макроподстановка и в книге наверно есть.
Пользоваться макроподстановками желательно в тех случаях когда без них никак не обойтись.
Если есть другие варианты, то лучше не пользоваться, т.к. при активном использовании макроподстановок ошибки в программе искать очень сложно.
попробуй
Код: plaintext
USE (Predm) EXCLUSIVE
не уверен что 2.0 поймет, но в более старших версиях работает.
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #37110940
fore5ta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Chek_FedorНо вот то что мне предложили

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
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.
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #37110956
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fore5taКак только условие IF вернет false, то в приведенном тобой коде нет возврата в область перебора по SCAN.Я, конечно, мало что помню уже про фпд, но скан ведь сканит свою рабочую область, независимо от того, какая является активной, разве нет?
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #37110972
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirfore5taКак только условие IF вернет false, то в приведенном тобой коде нет возврата в область перебора по SCAN.Я, конечно, мало что помню уже про фпд, но скан ведь сканит свою рабочую область, независимо от того, какая является активной, разве нет?
Правильно, всегда так было, SCAN работает в той области которая была на момент начала цикла, изменение рабочей области внутри скана никак не влияет на него, т.е. возвращаться в область скана ненужно.
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #37111455
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chek_FedorК моему сожалению мой код не работает как нужно т.е. после того как убрал APPEND... блоки вставляются только единожды
если находим p5080100.Pred>1 после "0" блок ставится следующий поставится только после повторения p5080100.Pred="0" и т.д.
Но вот то что мне предложили
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
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 то можно так написать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
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 перед ним лишний.
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #37111595
Chek_Fedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посоветуйте справочную инфу. Опять вас мучить пришел. Как исключить дубликаты например по столбцу "X" for ....
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #37111694
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chek_FedorПосоветуйте справочную инфу. Опять вас мучить пришел. Как исключить дубликаты например по столбцу "X" for ....
Код: plaintext
1.
2.
3.
4.
5.
6.
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 
думаю чего внутри скана писать сам догадаешься.
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #37111710
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу литературы, если память не подводит, была неплохая книга Программирование в FoxPro 2.x автор Попов
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #37111791
Юрий Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, советую обратить внимание на опцию IN команды REPLACE. Из личного опыта знаю, что если алиас, в котором делается замена значений полей, не активен, указания имени области в виде префикса ( например: имя алиаса.имя поля ) может оказаться недостаточно. Рекомендую всегда явно указывать имя алиаса в опции IN.

Простите, если вдруг "открыл Америку".
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #37111835
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий Р.Кстати, советую обратить внимание на опцию IN команды REPLACE. Из личного опыта знаю, что если алиас, в котором делается замена значений полей, не активен, указания имени области в виде префикса ( например: имя алиаса.имя поля ) может оказаться недостаточно. Рекомендую всегда явно указывать имя алиаса в опции IN.

Простите, если вдруг "открыл Америку".
Америку открыли гораздо позже, в FoxPro 2.x этого не было.
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #37112045
Юрий Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Sorry! Не досмотрел.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Синтаксис Replace в Fox Pro
    #38111113
Илья_Кот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа помогите с вопросом. Мне необходимо заменить значение в столбце 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
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #38111162
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Илья_Кот,

И как ругается? Матом?
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #38111168
Илья_Кот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNG,
почти матом. да еще и с вот таким знаком /. возможно в Foxe сложное условие выполнить с помощью команды replace? или чтото другое надо использовать?
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #38111193
Ffffffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программисты обычно приводят текст сообщения.
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #38111308
Илья_Кот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ffffffffffffffff,

Operator/operand type mismatch.
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #38111347
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Илья_КотFfffffffffffffff,

Operator/operand type mismatch.Ну и что непонятно в этом сообщении? Откуда мысль
возможно в Foxe сложное условие выполнить с помощью команды replace?? На чем она основана? На вере в свою безошибочность?
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #38111355
Илья_Кот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Sizov,

омг...что ж вы тут все как звери...
Два вопроса. Оператор replace может выполнить сложное логическое условие или нет? Если да то как?
...
Рейтинг: 0 / 0
Синтаксис Replace в Fox Pro
    #38111364
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Илья_Кот, может, причём именно так, как и написано. Но вот здесь
Илья_КотF_h_1='M21.4' AND Inv=1 вы сравниваете первое поле со строкой, второе - с числом. А типы этих полей какие?
...
Рейтинг: 0 / 0
25 сообщений из 58, страница 2 из 3
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Синтаксис Replace в Fox Pro
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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