|
1c подключение к csv | ☑ | ||
---|---|---|---|---|
0
Noxvil
30.10.12
✎
15:08
|
Добрый день, коллеги.
Есть обработка которая в делает следующее: 1) Подключается к sftp серверу 2) Получает таблицу csv, копирует её в темп 3) Получает из неё таблицу значений 4) Загружает данные на текущий момент необходимо следующее: Подключиться к таблице csv и не заливая её на пк клиента - отфильтровать и сделать таблицу значений. Вопросы: Можно ли подключиться на sftp сервер сразу к файлу в режиме чтения? Мы обрабатываем csv через текстовый документ, есть более простые и(или) быстрые методы сделать из csv таблицу значений? |
|||
1
Noxvil
30.10.12
✎
15:09
|
И, что важно - отфильтрованной сразу...
|
|||
2
mikecool
30.10.12
✎
15:11
|
если сервер сможет такое выдать - то легко, если нет - тянуть файл и обрабатывать на месте
|
|||
3
Defender aka LINN
30.10.12
✎
15:12
|
Через ADO. Но "не заливая её на пк клиента" не выйдет никак, хоть ты тресни. Так или иначе будет качаться.
Что мешает в темп сохранить, прочитать и выпилить? |
|||
4
Noxvil
30.10.12
✎
15:12
|
(2) Что значит "сервер сможет выдать" ?
|
|||
5
Torquader
30.10.12
✎
15:13
|
FTP-сервер выдаёт файл в порт или весь или его часть.
То есть вам нужно просто открыть порт на чтение и прочитать файл в память, обрабатывая его. |
|||
6
Noxvil
30.10.12
✎
15:13
|
(3) Хочется ускорить процесс... Файл весит 20 мегов, качать его через инет...
|
|||
7
mikecool
30.10.12
✎
15:13
|
(4) отправил запрос на сервер - получил ответ, то и значит
|
|||
8
le_
30.10.12
✎
15:15
|
(6) Все 20 метров по-любому будут качаться.
Через ёксель можно легко сделать из csv таблицу ёксель. |
|||
9
Noxvil
30.10.12
✎
15:17
|
(7) Такого нет
|
|||
10
Defender aka LINN
30.10.12
✎
15:17
|
(6) Он у тебя один фиг скачается. Так что кидай во временные, читай через ADO и удаляй после этого
|
|||
11
oleg_km
30.10.12
✎
15:18
|
(6) FTP-сервер не занет таких команд как преобразовать csv-файл в таблицу значений 1С. Почитай описание команд FTP-сервера
OFF: такая длиная цветная палочка |
|||
12
Noxvil
30.10.12
✎
15:19
|
Через ADO - быстрее всего?
|
|||
13
Noxvil
30.10.12
✎
15:20
|
(11) да это понятно...
Я имел ввиду - просто получить файл в режиме чтения не закачивая. |
|||
14
Umka2008
30.10.12
✎
15:20
|
НЕ ВЫЙДЕТ
|
|||
15
ДенисЧ
30.10.12
✎
15:22
|
А обязательно фтп? Может, тут webdav поможет?
|
|||
16
AlexNecro
30.10.12
✎
15:22
|
а если на сервере сохранять файл сразу в нужном формате, а не как попало?
|
|||
17
AlexNecro
30.10.12
✎
15:23
|
а сжатие?
|
|||
18
oleg_km
30.10.12
✎
15:23
|
(12) Лучше все сравнить экспериментально. Т.к. все зависит от данных, в каких-то случаях быстрее АДО, в каких-то чтениеТекста. Даже если АДО быстрее, разницу съест перемещение из рекордсета в ТЗ. Разве что отбор можно сделать SELECT'ом
(13) в случае FTP получить файл = закачать |
|||
19
Noxvil
30.10.12
✎
15:28
|
Ок, спасибо - попробую.
|
|||
20
Noxvil
07.11.12
✎
16:29
|
Не подскажите, почему все колонки кроме первой пустые получаются?
вот текст: "Раз";"Раз";"Раз" "Раз";"Раз";"Раз" КолПолей = 3; ДатаНач = ТекущаяДата(); Папка = Параметры.Папка; ИмяФайла = Параметры.ИмяФайла; КолПолей = 3; Текст = "[" + ИмяФайла + "] |ColNameHeader=false |Format=Delimited(;) |TextDelimiter=none |CharacterSet=ANSI |"; Текст = Текст + "Col" + 1 + "=Field" + 1 + " text" + Символы.ПС; Текст = Текст + "Col" + 2 + "=Field" + 2 + " text" + Символы.ПС; Текст = Текст + "Col" + 3 + "=Field" + 3 + " text" + Символы.ПС; Сообщить(Текст); ТекстДок = Новый ТекстовыйДокумент; ТекстДок.УстановитьТекст(Текст); ТекстДок.Записать(Папка + "Schema.ini"); objRec = Новый COMОбъект("ADODB.Recordset"); strQuery = "SELECT * FROM [" + ИмяФайла + "]"; strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Папка + ";Extended Properties=""text;"""; adOpenStatic = 3; adLockOptimistic = 3; adCmdText = 1; ТаблЗнач = Новый ТаблицаЗначений; Для ы = 1 По КолПолей Цикл ТаблЗнач.Колонки.Добавить(); КонецЦикла; objRec.Open(strQuery, strConn, adOpenStatic, adLockOptimistic, adCmdText); КолСтрок = objRec.RecordCount; Ном = 1; Пока Не objRec.EOF Цикл Если Ном % 500 = 0 Тогда Состояние(ИмяФайла + " " + Ном + " из " + КолСтрок); КонецЕсли; НовСтр = ТаблЗнач.Добавить(); Для i=0 По objRec.Fields.Count-1 Цикл НовСтр[i] = Строка(objRec.Fields(i).Value); КонецЦикла; objRec.MoveNext(); Ном = Ном + 1; КонецЦикла; objRec.Close(); Сообщить(ТекущаяДата()-ДатаНач); |
|||
21
Defender aka LINN
07.11.12
✎
16:36
|
TextDelimiter=none - не?
|
|||
22
Noxvil
07.11.12
✎
16:40
|
Там так и есть, а что должно быть?
|
|||
23
Noxvil
07.11.12
✎
16:42
|
Делал по первому примеру: http://infostart.ru/public/98398/
|
|||
24
Noxvil
07.11.12
✎
16:49
|
коллеги, нет мыслей на тему? Уже час бьюсь.... (
|
|||
25
Noxvil
07.11.12
✎
17:06
|
Проблема ещё актуальна.
|
|||
26
Noxvil
07.11.12
✎
17:12
|
Блин, там же в форуме был ответ...
|
|||
27
Fragster
гуру
07.11.12
✎
17:14
|
нарисовать морду на php к этому файлу
|
|||
28
Fragster
гуру
07.11.12
✎
17:14
|
(27)+ расположенную на том же сервере...
|
|||
29
Serginio1
07.11.12
✎
17:18
|
||||
30
Fragster
гуру
07.11.12
✎
17:32
|
(29) ну и говнокодище
|
|||
31
Fragster
гуру
07.11.12
✎
17:33
|
с уже готовым csv хорошо работает ADO, если его долго качать - то только сокращать количество качаемых данных через фильтры на стороне сервера - а это в любом случае морда на сервере
|
|||
32
Jaffar
07.11.12
✎
17:37
|
zip уже предлагали?
|
|||
33
Serginio1
07.11.12
✎
18:05
|
(30) И чем тебе код не нравится? Обычный автомат, переписанный.
Ну здесь ты не зависишь от ADO |
|||
34
Fragster
гуру
07.11.12
✎
18:07
|
(33) не нравится тем, что от него кровь из глаз идет.
|
|||
35
Serginio1
07.11.12
✎
18:14
|
(34) А это от того, что ты с автоматами не работал. Или тебе все пояснять надо? От регулярных выражение поначалу реки крови текут.
|
|||
36
Fragster
гуру
07.11.12
✎
18:15
|
а вообще - регулярка \".+\"|[^,]+ разве не разрубит на правильные куски строку?
|
|||
37
Fragster
гуру
07.11.12
✎
18:16
|
(35) я со всем работал. все понимаю. но от смешения языкаов типа "if ... тогда", не нужных пробелов строк, неправильных отступов - течет кровь из глаз.
|
|||
38
Fragster
гуру
07.11.12
✎
18:22
|
(36) не все случаи отрабатывает, но можно раскрутить до правильных случаев
|
|||
39
Fragster
гуру
07.11.12
✎
18:22
|
вернее до правильной обработки всех случаев
|
|||
40
Serginio1
07.11.12
✎
18:41
|
(36) Для примера напиши разбор такой строки
","""",""",10 Здесь всего два элемента ,""," 10 |
|||
41
Serginio1
07.11.12
✎
18:44
|
(37) Это перепись с C# и адаптация к 1С
|
|||
42
Serginio1
07.11.12
✎
18:44
|
41 А вообще первоначально это код на Delphi Бакнелла
|
|||
43
Ахиллес
07.11.12
✎
18:52
|
(0) Поднять на сервере MySQL, закачать файл в неё и тянуть уже из MySQL запросом?
|
|||
44
Fragster
гуру
07.11.12
✎
18:55
|
(40) вот такое вроде работает:
(\"([^"]|\"{2,2})*\")|[^,]+ проверял с помощью http://infostart.ru/public/75941/ |
|||
45
Fragster
гуру
07.11.12
✎
18:56
|
(44)+ у результата, естественно, заменить "" на "
|
|||
46
Serginio1
07.11.12
✎
19:10
|
(45) пробовал http://regexpres.narod.ru/calculator.html
Ну да ладно. Знаю, что регулярные выражения не все автоматы описывают, но они становятся все мощнее. ",22"""",""",10 не отрабатывает Должно быть ,22""," 10 |
|||
47
Fragster
гуру
07.11.12
✎
19:32
|
(46) обработка с инфостарта пилит правильно
|
|||
48
Fragster
гуру
07.11.12
✎
19:33
|
(47) опять же учитывая необходимость удаления экранов " и ""
|
|||
49
Fragster
гуру
07.11.12
✎
19:38
|
да и сайт тоже нормально ищет, просто там надо пробелы удалить сначала и конца, а также поставить "глобальный" поиск. видно, что по "replace" остается только одна запятая - это как раз разделитель.
|
|||
50
sttt
07.11.12
✎
19:59
|
что мешает обработать этот csv на сервере и отдать нужное?
как вариант на php: date_default_timezone_set('Europe/Berlin'); $pattern = sprintf('#%s.*|%s.*#', date('d/m/Y'), date('d/m/Y', strtotime("+1 day")) ); $file = file_get_contents('filename.csv'); preg_match_all($pattern, $file, $matches); var_dump($matches); |
|||
51
Serginio1
08.11.12
✎
10:39
|
(48) Ну вот видишь экраны нужно убирать. Так или иначе все равно на регах строится КА . В свое время опять же Бакнеловские примеры переделывал с таблицей переходов создавая НКА.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |