|
v7: Чтение csv в 1С 7.7 | ☑ | ||
---|---|---|---|---|
0
cmex
28.03.13
✎
12:56
|
Все доброго времени суток. Сабж. Разделитель полей: табуляция (0x09)
Разделитель строк: CR+LF (два символа: 0x0D 0x0A) Кодировка: Windows-1251. Спасибо |
|||
1
ДенисЧ
28.03.13
✎
12:57
|
На здоровье.
Рады, что поделился с нами мыслями. |
|||
2
cmex
28.03.13
✎
12:57
|
(1) )) забыл дописать) как организовать это самое чтение?
|
|||
3
palpetrovich
28.03.13
✎
13:00
|
в яндексе забанили? ...так к примеру
http://alsproject.ru/publ/prikladnye_obekty/rabota_s_tekstovymi_fajlami_i_fajlami_csv_v_1s_8_2/1-1-0-25 |
|||
4
palpetrovich
28.03.13
✎
13:01
|
+3 или так http://infostart.ru/public/98398/ с использованием АДО
|
|||
5
cmex
28.03.13
✎
13:05
|
(3) мне нужно для 7ки а там для 8ки,нет?
|
|||
6
palpetrovich
28.03.13
✎
13:06
|
так изабанили :) ...ну по (4) сходи
|
|||
7
cmex
28.03.13
✎
13:08
|
(4) тоже для 8. я был по обеим ссылкам. или 4 это для 7?я просто с 7кой не работал, установлю ее токо через час( на работе дист ищут))
|
|||
8
palpetrovich
28.03.13
✎
13:18
|
(7) да, согласен, сам не смотрел :) ...ну ща поищу для тебя :))
|
|||
9
FN
28.03.13
✎
13:25
|
Примерно так
Текст=СоздатьОбъект("Текст"); Текст.Открыть(СокрЛП(Файл)); ЗагрузкаИзТекста(Текст); Процедура ЗагрузкаИзТекста(Источник,Разделитель="") спРазделителей=СоздатьОбъект("СписокЗначений"); Если ПустоеЗначение(Разделитель)=1 Тогда спРазделителей.ДобавитьЗначение(";"); спРазделителей.ДобавитьЗначение(СимволТабуляции); спРазделителей.ДобавитьЗначение("|"); Иначе спРазделителей.ДобавитьЗначение(Разделитель); КонецЕсли; текст=СоздатьОбъект("Текст"); Строк=Источник.КоличествоСтрок(); для х=1 по Строк Цикл ТекСтрока=Источник.ПолучитьСтроку(х); для ш=1 по спРазделителей.РазмерСписка() Цикл ТекСтрока=СтрЗаменить(ТекСтрока,спРазделителей.ПолучитьЗначение(ш),РазделительСтрок); КонецЦикла; текст.Очистить(); текст.ДобавитьСтроку(ТекСтрока); ТЗ.НоваяСтрока(); для ш=1 по текст.КоличествоСтрок() Цикл Если ш>ТЗ.КоличествоКолонок() Тогда ТЗ.НоваяКолонка(); спШирина.ДобавитьЗначение(1); КонецЕсли; ТекЗнач=текст.ПолучитьСтроку(ш); ТЗ.УстановитьЗначение(х,ш,ТекЗнач); КонецЦикла; КонецЦикла; КонецПроцедуры P.S. ТЗ - Таблица значений Некорректно будет работать при наличии разделителей в данных заключенных в "" - но такие файлы редкость. |
|||
10
cmex
28.03.13
✎
14:05
|
(8) спасибо.
(9) большое спасибо, щас попробую |
|||
11
palpetrovich
28.03.13
✎
14:14
|
(10) отвлекают гады :) ..во, нарисовал:
Процедура Сформировать() ИмяФайла = "D:\filecsv.csv"; ФайлИмпорта = СоздатьОбъект("Текст"); ФайлИмпорта.КодоваяСтраница(0); Разделитель = СимволТабуляции; Если ФС.СуществуетФайл(ИмяФайла)=0 Тогда Сообщить("Не нашел файл"); Возврат; КонецЕсли; ФайлИмпорта.Открыть(ИмяФайла); // вычисляем максимальное число полей ТекСтрока=""; ЧислоПолей=1; Для НомерСтроки = 1 По ФайлИмпорта.КоличествоСтрок() Цикл Если ПустаяСтрока(ТекСтрока)>0 Тогда ТекСтрока = СокрЛП(ФайлИмпорта.ПолучитьСтроку(НомерСтроки)); КонецЕсли; ЧислоПолей = Макс(ЧислоПолей,СтрЧислоВхождений(СокрЛП(ФайлИмпорта.ПолучитьСтроку(НомерСтроки)),Разделитель)); КонецЦикла; ЧислоПолей = ЧислоПолей + 1; // выгрузим в ТЗ ТЗ = СоздатьОбъект("ТаблицаЗначений"); Для колКолонок = 1 по ЧислоПолей цикл ТЗ.НоваяКолонка("Поле"+колКолонок); КонецЦикла; Для НомерСтроки = 1 По ФайлИмпорта.КоличествоСтрок() Цикл ТекСтрока = СокрЛП(ФайлИмпорта.ПолучитьСтроку(НомерСтроки)); ТЗ.НоваяСтрока(); Для НомерПоля = 1 По ЧислоПолей Цикл ПозицияРазделителя = Найти(ТекСтрока,Разделитель); Если ПозицияРазделителя=0 Тогда ПозицияРазделителя = СтрДлина(ТекСтрока) + 1; КонецЕсли; ЗначениеПоля = Лев(ТекСтрока,ПозицияРазделителя-1); ТекСтрока = Прав(ТекСтрока,СтрДлина(ТекСтрока)-ПозицияРазделителя); ТЗ.УстановитьЗначение(НомерСтроки,НомерПоля,ЗначениеПоля); КонецЦикла; КонецЦикла; ТЗ.ВыбратьСтроку(); КонецПроцедуры |
|||
12
olegves
28.03.13
✎
14:26
|
(0) v7plus.dll тебе в помощь
|
|||
13
oslokot
28.03.13
✎
14:31
|
хм, а я всегда программно пересохраняю в xls, далее работаю с ёкселем
фс.ПереименоватьФайл(ВыбФайл_csv,ВыбФайл_xls,1); Ексель=СоздатьОбъект("Excel.Application"); Ексель.Displayalerts = 0; Книга=Ексель.Workbooks.Open(Сокрлп(ВыбФайл_xls)); Книга.SaveAs(ВыбФайл_xls,-4143); Книга.Close(); Ексель.Quit(); |
|||
14
palpetrovich
28.03.13
✎
14:33
|
(13) а из xls можно еще и в дбф пересохранить ;)
|
|||
15
FN
28.03.13
✎
14:35
|
(14) а потом дбф загнать в sql и прямым запросом вытащить
:) легких путей не ищем |
|||
16
oslokot
28.03.13
✎
14:37
|
(15) это мне на мисте советовали :) я не знаю как с csv работать, ну его к черту )
|
|||
17
oslokot
28.03.13
✎
14:38
|
(14) кстати да, нада попробовать )
|
|||
18
cmex
28.03.13
✎
15:33
|
Всем спасибо. Все отлично работает. Попутно в 7 коде боле менее стало что то понятно)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |