|
|
|
Очень сложная задача
|
|||
|---|---|---|---|
|
#18+
На работе мне поставили задачу: Дано: 1) есть текстовый файл C:\myfile.txt файл содержит такие строки: REG=40\KOD=175\NAME=МИХАИЛ KOD=150\REG=56\NAME=ДМИТРИЙ ... NAME=ЛЕОНИД\KOD=60\REG=77 2) БД mybd.mdb 3) в БД mybd.mdb- таблица Mytable таблица содержит поля:Регион,Код,Имя Задача: произвести сохранение записей из myfile.txt в mytable, но следующим образом: если обнаруживается в записи слово "REG=", то его значение "40", должно быть скопировано в поле "Регион" таблицы "Mytable"; если "KOD=", то "175" в поле "Код"; если "NAME=", то "Михаил" в поле "Имя" таблицы "Mytable". В итоге, таблица mytable должна содержать такие записи: Регион Код Имя 40 175 Михаил 56 150 Дмитрий 77 60 Леонид Как это возможно реализовать ? Или вообще можно такое реализовать ? Заранее огромное спасибо всем !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2003, 04:56 |
|
||
|
Очень сложная задача
|
|||
|---|---|---|---|
|
#18+
Не очень сложная. Судя по вопросу - с VBA проблемы, иначе вопроса бы не не было. Читаем файл по строкам Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. и пишем разбор Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. здесь приведено получение строки до первого слеша и проверка на нахождение в нем KOD, остальное сделайте сами, это же ваша работа :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2003, 07:51 |
|
||
|
Очень сложная задача
|
|||
|---|---|---|---|
|
#18+
БОЛЬШОЕ СПАСИБО ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 07:25 |
|
||
|
Очень сложная задача
|
|||
|---|---|---|---|
|
#18+
Уже сделали? На здоровье. Не очень сложно ведь. Нудновато, это да, но теперь вы имеете представление о работе со строками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 07:39 |
|
||
|
Очень сложная задача
|
|||
|---|---|---|---|
|
#18+
Поспешил...в поле КОД добавляются записи, но равны "0"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 07:44 |
|
||
|
Очень сложная задача
|
|||
|---|---|---|---|
|
#18+
Ну тут ловите ошибку Код: plaintext 1. 2. 3. 4. 5. И смотрим в окне отладчика, что не так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 07:58 |
|
||
|
Очень сложная задача
|
|||
|---|---|---|---|
|
#18+
\REG=40\KOD=175\NAME=МИХАИЛ строка в тексте начинается с флэша, может быть поэтому str1 определяется как ноль "0" ?...Как его пропустить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 08:56 |
|
||
|
Очень сложная задача
|
|||
|---|---|---|---|
|
#18+
Ну так и надо было писать тогда поиск поиск первого разделяющего слеша будет выглядеть так Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 09:20 |
|
||
|
Очень сложная задача
|
|||
|---|---|---|---|
|
#18+
Поменял If InStr(str1, "KOD") > 0 на If InStr(str1, "KOD") = 0 и запись добавилась в таблицу нормально...что эта строка значит ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 09:22 |
|
||
|
Очень сложная задача
|
|||
|---|---|---|---|
|
#18+
Вообще-то можно бы было и в хелпе посмотреть, что InStr возвращает 0, в случае, если вторая строка не найдена в первой, т.е. в данном случае If InStr(str1, "KOD") = 0 KOD не в строке не найден ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 09:29 |
|
||
|
Очень сложная задача
|
|||
|---|---|---|---|
|
#18+
Переписал Вашу программу (Left на Mid) и все заработало, НО условие >0 все равно не дает результата (вставляет в поле все нули), а нормально работает только при =0. Я бы был беспредельно счастлив, если бы Вы пояснили суть Вашего кода "на словах", чтобы я мог понять его принцип... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 09:35 |
|
||
|
Очень сложная задача
|
|||
|---|---|---|---|
|
#18+
Ну а вообще, если поменять знак больше на равно- это глобально поменяет результаты программы ? И да, кстати, между какими строками мне лучше поместить второй обработчик ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 09:42 |
|
||
|
Очень сложная задача
|
|||
|---|---|---|---|
|
#18+
Мне сложно писать больше чем написано в комментариях к строкам, а иначе нужно переписывать учебник по VB. Конструкция Код: plaintext 1. 2. выделяет числовое значение из строки в том случае, если в ней не найдено KOD, т.е видимо с REG. А обработку на REG и NAME вы как сделали? А вообще, можно кинуть кусок реальных данных? Рабочий день кончается, пойду в аптеку, магазин, зайду часа через полтора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 09:52 |
|
||
|
Очень сложная задача
|
|||
|---|---|---|---|
|
#18+
И да, кстати, между какими строками мне лучше поместить второй обработчик ? Обработчик, проверяющий наличие в строке KOD, NAME, REG лучше вынести в отдельную функцию, передавая в нее строку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 09:56 |
|
||
|
Очень сложная задача
|
|||
|---|---|---|---|
|
#18+
ОГРОМНОЕ ВАМ СПАСИБО ЗА ПОМОЩЬ !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 10:05 |
|
||
|
Очень сложная задача
|
|||
|---|---|---|---|
|
#18+
А вообще, можно кинуть кусок реальных данных? Реальные три строки файла myfile.txt 1)/REG=54/WMI=X4P/NAME=ОАО "НовосибООО"/MOD=4735/NDV=51300Н*21032283/NKUZ=33070020039311/NSH=33070020834233/PTS=54КК187139/VIN=Х4Р47350030000048/KODSP=20/COLOR=СНЕЖНО-БЕЛЫЙ/DOTGR=20012003/OPER=34/NPO=АНУЛИРОВАНА ИНН 701400319410/APO=РОССИЯ 1/DOK=№ ,20012003/REM=/DOP=20012003 2)/REG=54/WMI=X4P/NAME=ОАО "НовосибЛЛЛ"/MOD=2730НА/NDV=40630А*23111266/NKUZ=33020030181019/NSH=33020031911031/PTS=54АА187135/VIN=Х4Р2730НА30001709/KODSP=20/COLOR=СНЕЖНО-БЕЛЫЙ/DOTGR=14012003/OPER=34/NPO=ЗАО СЕРВИС ИНН 4200000291/APO=РОССИЯ 4 /DOK=№ ,14012003/REM=/DOP=14012003 3)/REG=54/WMI=X4P/NAME=ОАО "НовосибPPP"/MOD=2730НА/NDV=421500*21005451/NKUZ=33020020175577/NSH=33021021905214/PTS=54КК187134/VIN=Х4Р2730НА20001703/KODSP=20/COLOR=СНЕЖНО-БЕЛЫЙ/DOTGR=10012003/OPER=34/NPO=ОАО РУСИЧ ИНН 5410115075/APO=РОССИЯ 36 /DOK=№ ,10012003/REM=/DOP=10012003 Естественно 1),2) и 3)- в файле отсутствуют... Mytable Поля: Region, WMI, NameOrg, Model ... (REG=Region, WMI=WMI, NAME=NameOrg...) Т.е. все записи из файла нужно сохранить в таблице БД и естественно без REG=, WMI=...Причем эти поля в файле могут идти по-разному (REG=,WMI= или наоборот)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 10:43 |
|
||
|
Очень сложная задача
|
|||
|---|---|---|---|
|
#18+
ОХ, мля..... С этого нужно было и начинать! Делаем таблицу соответствий Table1 и заполняем ее Код: plaintext 1. 2. 3. table 2 - это выходная таблица с полями (Region,WMI.....) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Все, должно работать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 12:23 |
|
||
|
Очень сложная задача
|
|||
|---|---|---|---|
|
#18+
Можно вот так: Public Function readFile() Dim strLine As String Dim MYdb As Database, MyTable As Recordset, i As Long, k As Long, simb As String * 1, dozn As String, poslezn As String Dim flagdozn As Boolean, qdf As QueryDef Set MYdb = CurrentDb() For i = 0 To MYdb.TableDefs.Count - 1 If MYdb.TableDefs(i).Name = "table1" Then DoCmd.RunSQL "DROP TABLE table1" Exit For End If Next i DoCmd.RunSQL "CREATE TABLE table1 (Nomzap INTEGER, nampol TEXT, VALUEPOL TEXT);" Set MyTable = MYdb.OpenRecordset("table1") k = 0 dozn = "" poslezn = "" Open "C:\myfile.txt " For Input As #1 Do While Not EOF(1) Line Input #1, strLine k = k + 1 For i = 1 To Len(strLine) simb = Mid(strLine, i, 1) If simb = "\" Or simb = "/" Then simb = "/" Select Case simb Case "/" If dozn <> "" Then MyTable.AddNew MyTable![Nomzap] = k MyTable![nampol] = dozn If poslezn <> "" Then MyTable![VALUEPOL] = poslezn End If MyTable.Update dozn = "" poslezn = "" End If flagdozn = True Case "=" flagdozn = False Case Else If flagdozn Then dozn = dozn & simb Else poslezn = poslezn & simb End If End Select Next i Loop Close #1 Set qdf = MYdb.CreateQueryDef("P1", "TRANSFORM First(table1.VALUEPOL) AS [Значение] SELECT table1.Nomzap FROM table1 GROUP BY table1.Nomzap PIVOT table1.nampol;") DoCmd.SetWarnings False DoCmd.RunSQL "SELECT P1.* INTO [table] FROM P1;" DoCmd.SetWarnings True DoCmd.DeleteObject acQuery, "P1" End Function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 12:39 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1757&tid=1679697]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 367ms |

| 0 / 0 |
