|
v7: Поиск в DBF файле | ☑ | ||
---|---|---|---|---|
0
vitalka
08.08.13
✎
15:46
|
сочинил обработку, которая должна искать заданную строку ВыбИмя в DBF-файле. Поиск выполняю без учета регистра, пробелов, табуляций, запятых и точек в поле NAME.
Но почему-то по моему условию Найти(""+КодДет,""+ВыбИмя)>0 ничего не находится. Процедура Сформировать() ДБФ = СоздатьОбъект("XBase"); ПутьДБ = ВыбПоставщик.ПутьКпрайсу; ДБФ.ОткрытьФайл(ПутьДБ); ВыбИмя = СтрЗаменить(ВыбИмя," ",""); ВыбИмя = Нрег(ВыбИмя); ВыбИмя = СтрЗаменить(ВыбИмя,",",""); ВыбИмя = СтрЗаменить(ВыбИмя,".",""); Если ДБФ.Открыта() = 1 Тогда ДБФ.Первая(); Пока ДБФ.ВКонце() = 0 Цикл //Убираем пробелы КодДет = СтрЗаменить(""+ДБФ.NAME," ",""); //Убираем табуляции КодДет = СтрЗаменить(КодДет," ",""); //Делаем все строчными буквами КодДет = Нрег(КодДет); ////Убираем запятые и точки КодДет = СтрЗаменить(КодДет,",",""); КодДет = СтрЗаменить(КодДет,".",""); // Сообщить(КодДет+" - "+ВыбИмя); Если Найти(""+КодДет,""+ВыбИмя)>0 Тогда Сообщить(СокрЛП(""+ДБФ.NAME)); КонецЕсли; Если ДБФ.Следующая() = 0 Тогда Прервать; ДБФ.ЗакрытьФайл(); КонецЕсли; КонецЦикла; ДБФ.ЗакрытьФайл(); Иначе Предупреждение("Не смогли открыть Базу!"+" "+ПутьДБ,0); КонецЕсли; КонецПроцедуры |
|||
1
dk
08.08.13
✎
15:57
|
про отладчик уже было? (С)
|
|||
2
palpetrovich
08.08.13
✎
15:58
|
(0) хвастешься? :)
(0) не еще зы: наверное стоит открыть для себя индексы |
|||
3
palpetrovich
08.08.13
✎
15:58
|
второе (0) читать (1) :)
|
|||
4
1Сергей
08.08.13
✎
15:58
|
чему равны КодДет и ВыбИмя, при которых Найти(""+КодДет,""+ВыбИмя) = 0 ?
|
|||
5
Масянька
08.08.13
✎
16:09
|
+(4) Типы значений: ДБФ.NAME и КодДет?
|
|||
6
oslokot
08.08.13
✎
16:14
|
(0) Найти(КодДет,СокрЛП(ВыбИмя))
|
|||
7
vitalka
08.08.13
✎
16:14
|
(5)я специально их скавниваю как ""+, чтобы оба значения были строковыми, но сейчас попробую перед сравнением преобразовывать в строку.
Если розкоментировать строку // Сообщить(КодДет+" - "+ВыбИмя); выводятся значения КодДет - ВыбИмя вот кусок ad130348=13348 - ad130354=13354 ad130352 - ad130354=13354 ad130354=13354 - ad130354=13354 последние (помоему) одинаковые |
|||
8
Масянька
08.08.13
✎
16:16
|
(7) После преобразования в строку - отсекай пробелы справа и слева.
|
|||
9
vitalka
08.08.13
✎
16:20
|
(8)Пробовал
Результат тот-же, что и КодДет = СтрЗаменить(""+ДБФ.NAME," ",""); |
|||
10
Масянька
08.08.13
✎
16:22
|
(9) То, что (7) последние - неодинаковые. Покажи, как отсекал пробелы.
|
|||
11
vitalka
08.08.13
✎
16:25
|
//Это то, что ищем
ВыбИмя = СтрЗаменить(ВыбИмя," ",""); ВыбИмя = Нрег(ВыбИмя); ВыбИмя = СтрЗаменить(ВыбИмя,",",""); ВыбИмя = СтрЗаменить(ВыбИмя,".",""); ВыбИмя = СокрЛП(ВыбИмя); //Это то, где ищем //Убираем пробелы КодДет = СтрЗаменить(""+ДБФ.NAME," ",""); //Убираем табуляции КодДет = СтрЗаменить(КодДет," ",""); //Делаем все строчными буквами КодДет = Нрег(КодДет); ////Убираем запятые и точки КодДет = СтрЗаменить(КодДет,",",""); КодДет = СтрЗаменить(КодДет,".",""); КодДет = СокрЛП(КодДет); |
|||
12
Масянька
08.08.13
✎
16:28
|
(11) И в таком варианте возвращает то, что в (7)?
А зачем Найти используешь? |
|||
13
vitalka
08.08.13
✎
16:36
|
(12)да, если выводить до Найти
+(12)а что использовать? |
|||
14
Масянька
08.08.13
✎
16:55
|
(13) Да не может такое, как в (7) возвращать после кода в (11). Давай полный код. Вместо Найти - тупое сравнение
Если КодДет = ВыбИмя Тогда Сообщить(СокрЛП(""+ДБФ.NAME)); КонецЕсли; Кстати, из Сообщить убери пробелы перед и после - и покажи, что возвращает. |
|||
15
vitalka
08.08.13
✎
17:12
|
(14)Вот это ищу "AD 03.0314 = 3.314"
Вот это код процедуры Процедура Сформировать() ДБФ = СоздатьОбъект("XBase"); ПутьДБ = ВыбПоставщик.ПутьКпрайсу; ДБФ.ОткрытьФайл(ПутьДБ); ВыбИмя = СтрЗаменить(ВыбИмя," ",""); ВыбИмя = Нрег(ВыбИмя); ВыбИмя = СтрЗаменить(ВыбИмя,",",""); ВыбИмя = СтрЗаменить(ВыбИмя,".",""); // ВыбИмя = Строка(ВыбИмя); ВыбИмя = СокрЛП(ВыбИмя); Если ДБФ.Открыта() = 1 Тогда ДБФ.Первая(); Пока ДБФ.ВКонце() = 0 Цикл //Убираем пробелы КодДет = СтрЗаменить(""+ДБФ.NAME," ",""); //Убираем табуляции КодДет = СтрЗаменить(КодДет," ",""); //Делаем все строчными буквами КодДет = Нрег(КодДет); ////Убираем запятые и точки КодДет = СтрЗаменить(КодДет,",",""); КодДет = СтрЗаменить(КодДет,".",""); // КодДет = Строка(КодДет); КодДет = СокрЛП(КодДет); Сообщить(КодДет+" - "+ВыбИмя); Если КодДет=ВыбИмя Тогда Сообщить(СокрЛП("НАШЛО -"+ДБФ.NAME)); КонецЕсли; Если ДБФ.Следующая() = 0 Тогда Прервать; ДБФ.ЗакрытьФайл(); КонецЕсли; КонецЦикла; ДБФ.ЗакрытьФайл(); Иначе Предупреждение("Не смогли открыть Базу!"+" "+ПутьДБ,0); КонецЕсли; КонецПроцедуры Вот это выводимый результат ad030314=3314 - ad130332 ad1103112 - ad130332 ad110364=11364 - ad130332 ad1103761=113761 - ad130332 ad113621=1103621 - ad130332 ad130309=13309 - ad130332 ad130319=13319 - ad130332 ad130321=13321 - ad130332 ad130332 - ad130332 ad130335 - ad130332 В предпоследней записи одинаковые значения |
|||
16
Ёпрст
08.08.13
✎
17:17
|
И выбИмя поди, реквизит формы ?
:)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) |
|||
17
Масянька
08.08.13
✎
17:17
|
Замени - Сообщить(КодДет+" - "+ВыбИмя); на - Сообщить(КодДет+"-"+ВыбИмя); покажи, что вывело.
|
|||
18
Ёпрст
08.08.13
✎
17:18
|
(15)
замени на Если КодДет=СокрЛП(ВыбИмя) Тогда Сообщить("Спасибо, Ёпрст!"); |
|||
19
vitalka
08.08.13
✎
17:20
|
(16)спасибо!!!Заработало
|
|||
20
Масянька
08.08.13
✎
17:21
|
(18) А разница между (14) и (18) в чем?
|
|||
21
Ёпрст
08.08.13
✎
17:23
|
(20) длина реквизита формы всегда постоянная велечина, заданая свойством реквизита
|
|||
22
vitalka
08.08.13
✎
17:25
|
(15)(18)Заменил имя реквизита формы на ВыбИмя_
а в процедуру добавил ВыбИмя = ВыбИмя_; и заработало Что изменилось хрен его знает )))) |
|||
23
Ёпрст
08.08.13
✎
17:27
|
(22) см. (21)
|
|||
24
Ёпрст
08.08.13
✎
17:28
|
Если не дошло, то выведи так:
Сообщить(СтрЗаменить(ВыбИмя," ","*")); |
|||
25
Масянька
08.08.13
✎
17:29
|
+(24) Лучше так: Сообщить("1 - (" + ВыбИмя + ")");
|
|||
26
vitalka
08.08.13
✎
17:29
|
(23)Спасибо, уже понял
А с индексами не буду и пробовать и так ищет мгновенно))) |
|||
27
oslokot
08.08.13
✎
17:33
|
тяжела жизнь без отладчика, не спорю.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |