|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
Господа, приветствую. Есть задача - считывать определенные письма из Outlook. Из вложений в письмах считывать информацию (в pdf файлах) и сохранять данные в базу + создавать письма автоматом на те данные, что приходят из писем. Ну и так как это действие долгоиграющее - прогрессбар для отрисовки сколько всего писем будет отработано, сколько информации в них, сколько отработано... Весь процесс сделан, работал. Но попался комп, на котором есть проблема. Комп значительно мощнее моего и многих, на которых пробовалось. Даже на виртуалке у себя пробовал. Процесс: Выборку нужных писем - предварительную, для значений прогрессбара и сохранение нужных писем в коллекцию. Сохранение и конвертацию pdf в txt. (тоже не с первого раза нашел конвертер) Проблема: Часто(случайным образом, систему не смог вычислить) - после отработки конвертации - при попытке считать сам файл txt дает пустую строку. Дальше процесс "ложится". Причем может первое письмо не обработать(считать сконвертированный txt), а может и где то в середине. При проверке кода с точкой останова - все ок. Все везде считывается. При любом количестве писем. Понимаю, что процесс идет асинхронно. Кто то за кем то не успевает. Пробовал проверять наличие файла через Код: vbnet 1.
и потом (к сожалению код не сохранил, но принцип этот) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Показывает, что файл есть, а ничего не считывает с файла, точнее данные файла="" Пробовал проверять через FSO. Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Проблема остается. Пробовал ставить задержку до считывания Код: vbnet 1. 2. 3. 4. 5. 6. 7.
помогает, но для каждого компа нужно подбирать свое значение задержки. Да и процесс удлиняет на много. Понятно что не климатит. Да и если чуть перебрал в подборе - неприятное подвешивание самого акса, не системы. Кстати, заметил, что процесс берет не больше 25% от процессора, правда по мере обработки писем - растет занятая память оперативы компа. Правда как то сразу не догадался проверить (сейчас не могу) - что съедает память. но в объем памяти - не упираюсь. Переделал на построчное считывание файла txt (через клас), не помогло. Запихнул проверку наличия файла перед построчным считыванием(тут на форуме нашел) Код: vbnet 1. 2. 3. 4. 5. 6. 7.
проблема может улучшилась, но не решилась полностью. Пробовал даже сохранение и конвертацию вставлять в начало процесса - в момент выборки писем, а считывать текстовый файл по мере обработки выбранных писем. Не помогло... Может вопрос в том, что в этом процессе идет обращение к нескольким "сторонним приложениям"? Сначала Outloook(выборка и сохранение вложений), потом конвертер( из pdf в txt), потом запись данных в базу, потом опять Outlook(создание писем, событий) Кучу написал, уж простите, но это чтобы было видно что и как делал. Чтобы не повторяться с вариантами решения проблемы Прошу помощи в вопросе: Как мне побороть это не успевание или неправильное считывание конвертированного файла? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2015, 14:55 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
Игортан, многа букав... Если я прально тебя понял, то попробуй вот этот 7340257 вариант от Бенедикта. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2015, 18:11 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
Игортан, Ни ужели никто не конвертировал pdf в txt, чтобы уже потом считать текстовый файл. Может есть какие подводные камни? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2015, 18:17 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
\\\\, Спасибо, сейчас буду глядеть ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2015, 18:18 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
\\\\, По ссылке - идет сборка данных по файлам в папке. На сколько я понимаю, у меня при проверке нахождения файла в папке Dir и FSO показывает, что файл есть. И пропускает выполнение кода дальше. И тут же при попытке его прочитать получаю ="". Такое чувство, что создается файл с именем, потом заполняется данными из pdf. Может в момент создания файла (он уже есть) и до заполнения его данными из pdf как раз и происходит попытка считать его. Если честно только сейчас в голову пришло, может ли такое быть? Кто знает процесс конвертации файлов глубоко. Подскажите Я думаю, что сколько бы не было программок для конвертации, они работают по одному принципу. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2015, 18:32 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
Игортан, я не очень представляю работу твоего конвертера (вообще обработка пидиэф-файлов тот ещё изврат, не для этого они созданы, ИМХО), но попробуй вместо события __InstanceCreationEvent (создание) использовать событие __InstanceModificationEvent (изменение). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2015, 18:44 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
Игортан, вот только ПДФ-ки разные --одни имеют текстовый слой и их можно преобразовать в тхт --другие --состоят из рисунков, при их сохранении в тхт получаем файлы длиной 2 байта --пустые ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2015, 18:44 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
Игортанпоказывает, что файл есть. И пропускает выполнение кода дальше. И тут же при попытке его прочитать получаю ="". Игортан, а ошибки у тебя как обрабатываются в данной процедуре? Не игнорирование ли? Текстовый файл скорее всего заболокирован для чтения и должна быть соответствующая ошибка. Лично мне вот так кааца © Аркадий Райкин ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2015, 18:50 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
\\\\Игортан, я не очень представляю работу твоего конвертера (вообще обработка пидиэф-файлов тот ещё изврат, не для этого они созданы, ИМХО), но попробуй вместо события __InstanceCreationEvent (создание) использовать событие __InstanceModificationEvent (изменение). Не понял пока. ПЕНСИОНЕРКАвот только ПДФ-ки разные --одни имеют текстовый слой и их можно преобразовать в тхт --другие --состоят из рисунков, при их сохранении в тхт получаем файлы длиной 2 байта --пустые Файлы конвертируются нормально. Т.е. при попытке открыть - все ок. Текст есть. Одно время было, когда буквы/слова в тексте пропадали при попытке считать текст. Я уже не помню, что делал после этого....Уже столько всего пробовал, в разной вариации... \\\\Игортан, а ошибки у тебя как обрабатываются в данной процедуре? Не игнорирование ли? Текстовый файл скорее всего заблокирован для чтения и должна быть соответствующая ошибка. Ох, не помню. нету кода под рукой сейчас. У меня там часть функций при ошибке обнуляет ее и продолжает процесс, часть с нормальной обработкой... Первое, что проверю когда доберусь до базы. А чем может быть занят файл - самим процессом программы конвертации? потому как файлы pdf складирутся в отдельную папку и в момент конвертации и считывания - обращений других нет ни к этой папке в целом не к какому нибудь файлу, кроме запрашиваемого. Т.е. процесс проходит при одном юзере. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2015, 19:24 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
Игортан, Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2015, 20:46 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКА, Нет, нет. Это я взял с форума первый попавшийся пример. Делал относительно давно и когда переделал на FSO, тот кусок кода затер. А этот пример привел - как принцип через Open...For ... вот не могу с наскока быстро найти более правильный пример. Но он тоже, то работал, то нет. Т.е. в одном импорте мог считать все файлы, если повторить - несколько пропустить. ни какой системы не смог обнаружить почему так. Но и через FSO результат был тот же ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 00:02 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
Игортан, а какой программой вы распознаете --хотелось бы попробовать, заинтересовал вопрос ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 08:02 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
Игортан, покажите, как выглядит строка вызова конвертера. Если это EXE-шник, и вы используете ф-ю Shell, и он закрывается по завершении конвертации, то попробуйте вместо Shell использовать метод Run из WSHShell - он умеет дожидаться завершения процесса. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 12:14 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКАа какой программой вы распознаете --хотелось бы попробовать, заинтересовал вопрос pdftotext.exe правда я ее переименовал в pdftotext.dll (что бы не было ненужных вопросов) Анатолий ( Киев )Игортан, покажите, как выглядит строка вызова конвертера. Если это EXE-шник, и вы используете ф-ю Shell, и он закрывается по завершении конвертации, то попробуйте вместо Shell использовать метод Run из WSHShell - он умеет дожидаться завершения процесса. Код: vbnet 1. 2. 3.
Анатолий ( Киев )использовать метод Run из WSHShell нету под рукой примерчика? \\\\а ошибки у тебя как обрабатываются в данной процедуре? Не игнорирование ли? ох да. Сбрасывал ошибку и дальше шел....сейчас уберу и если получится на том компе стрельну разок ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 12:46 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
Игортанох да. Сбрасывал ошибку и дальше шел....сейчас уберу и если получится на том компе стрельну разок а не проканало. ошибок нет. все нормально отрабатывает. А вот со второго раза - все нормально прокатило. такое чувство, что пока идет перезапись получившегося файла (как я понимаю - удаление старого и создание нового) - успевает подхватить данные из "старого" файла? буду попробовать рыть в сторону WSHShell ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 13:16 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 14:15 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
Игортан, у меня получилась ерунда(демо версия программы) взяла обычный ворд-документ на выходе получила аброкадабру ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 14:26 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
Игортан, результат ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 14:26 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКА, Вероятно не умеет с кирилицей работать. Но мне и не нужно с кирилицей, потому и не заметил этого изьяна. WSHShell - запустил. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
И даже вроде все гладко пошло!!! Есть минус: пришлось переименовать расширение файла на обычное - exe Есть ли возможность оставить расширение dll? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 14:56 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКА, и никаких демо, я просто скачал архив - там несколько программок от одного разработчика в txt, помню картинки вытягивает если сейчас найду скину сюда может кому нужно будет Думаю у нас разные одноименные програмки ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 14:59 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
Игортан, архив большой, сюда не лезет - 10метров кстати - 32/64 версии и варианты конвертации ссылка на скачивание: 14 дней https://dropmefiles.com/zngbk ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 15:22 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
ИгортанЕсть минус: пришлось переименовать расширение файла на обычное - exe Есть ли возможность оставить расширение dll? Т.е. родной Shell с ДЛЛ-кой работает а крутой WshShell.Run - нет? Странно! Впрочем, с помощью пары-тройки API функций можно организовать ожидание и для Shell. Вот первый попавшийся пример , но можете найти еще. Я гуглил по vba shell wait ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 17:16 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
Игортан, а вообще, если переименовали в EXE и опботает, то может и не стоит искать приключений...? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 17:19 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
Анатолий ( Киев )Т.е. родной Shell с ДЛЛ-кой работает а крутой WshShell.Run - нет? Странно! Таки да. Я не сразу допер, почему бьет ошибку, а потом обратил внимание в хелпах, что речь идет об исполняемых файлах. Вероятно что то зашито на расширение exe. Анатолий ( Киев )Игортан, а вообще, если переименовали в EXE и опботает, то может и не стоит искать приключений...? тут конечно согласен... Искать на ж... приключений неохота. И так процесс не из самых простых. Думал, может есть решение в одну строку. опана, писал сейчас про разрядность винды... а может у меня все это из за того, что конвертер мой для 32битной, а тот "неудачный" комп - 64 семерка. Ну да ладно, обкатаем недельку, дальше будем посмотреть Всем спасибо за помощь и участие. По факту вопросы по аксу задаю только здесь, всегда помогали. Так что и форуму спасибо)) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 18:38 |
|
Считывание текстовых файлов в цикле
|
|||
---|---|---|---|
#18+
Анатолий ( Киев )Т.е. родной Shell с ДЛЛ-кой работает а крутой WshShell.Run - нет? Странно! Это не dll, это обычный экзешник. Я его просто расширение поменял, что бы внешне сходила на библиотеку программы. Что бы у людей не возникло вопроса, почему стороннее ставим, помимо своего. Может и не будут спрашивать, но хотелось заранее обойти этот вероятный вопрос ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 18:41 |
|
|
start [/forum/topic.php?fid=45&msg=39099590&tid=1614280]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 314ms |
total: | 443ms |
0 / 0 |