Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Считывание текстовых файлов в цикле / 25 сообщений из 27, страница 1 из 2
09.11.2015, 14:55
    #39098465
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
Господа, приветствую.

Есть задача - считывать определенные письма из Outlook. Из вложений в письмах считывать информацию (в pdf файлах) и сохранять данные в базу + создавать письма автоматом на те данные, что приходят из писем.
Ну и так как это действие долгоиграющее - прогрессбар для отрисовки сколько всего писем будет отработано, сколько информации в них, сколько отработано...

Весь процесс сделан, работал. Но попался комп, на котором есть проблема.
Комп значительно мощнее моего и многих, на которых пробовалось. Даже на виртуалке у себя пробовал.
Процесс:
Выборку нужных писем - предварительную, для значений прогрессбара и сохранение нужных писем в коллекцию.
Сохранение и конвертацию pdf в txt. (тоже не с первого раза нашел конвертер)
Проблема:
Часто(случайным образом, систему не смог вычислить) - после отработки конвертации - при попытке считать сам файл txt дает пустую строку. Дальше процесс "ложится".
Причем может первое письмо не обработать(считать сконвертированный txt), а может и где то в середине.
При проверке кода с точкой останова - все ок. Все везде считывается. При любом количестве писем.

Понимаю, что процесс идет асинхронно. Кто то за кем то не успевает.

Пробовал проверять наличие файла через
Код: vbnet
1.
If Dir(strNameFile, vbDirectory) <> "" Then

и потом (к сожалению код не сохранил, но принцип этот)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
FileName = "C:\1\1.txt"

f = FreeFile

Open FileName For Input As f
Do While Not EOF(f)
  FileTxt = Input(1, #f)
  Debug.Print UsefulTxt
Loop
Close #f


Показывает, что файл есть, а ничего не считывает с файла, точнее данные файла=""

Пробовал проверять через FSO.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FileExists(strNameFile) Then
    Set FSTR = FSO.OpenTextFile(strNameFile)
    BodyTxt = FSTR.ReadAll
    FSTR.Close
    Set FSTR = Nothing
End If


Проблема остается.


Пробовал ставить задержку до считывания
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
For aa = 1 To 100
        For ee = 1 To 110
        If Dir(strMyFileNameTo, vbDirectory) <> "" Then
            
        End If
    Next ee
Next aa


помогает, но для каждого компа нужно подбирать свое значение задержки. Да и процесс удлиняет на много. Понятно что не климатит.
Да и если чуть перебрал в подборе - неприятное подвешивание самого акса, не системы.
Кстати, заметил, что процесс берет не больше 25% от процессора, правда по мере обработки писем - растет занятая память оперативы компа. Правда как то сразу не догадался проверить (сейчас не могу) - что съедает память. но в объем памяти - не упираюсь.

Переделал на построчное считывание файла txt (через клас), не помогло.
Запихнул проверку наличия файла перед построчным считыванием(тут на форуме нашел)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
While Dir(strNameFile) = ""
    a = a + 1
    If a = 10000 Then ' вставил иначе можно от сюда никогда и не выйти
        GoTo ReadTXT_Error
    End If
    DoEvents
Wend

проблема может улучшилась, но не решилась полностью.

Пробовал даже сохранение и конвертацию вставлять в начало процесса - в момент выборки писем, а считывать
текстовый файл по мере обработки выбранных писем. Не помогло...
Может вопрос в том, что в этом процессе идет обращение к нескольким "сторонним приложениям"?
Сначала Outloook(выборка и сохранение вложений), потом конвертер( из pdf в txt), потом запись данных в базу, потом опять Outlook(создание писем, событий)

Кучу написал, уж простите, но это чтобы было видно что и как делал. Чтобы не повторяться с вариантами решения проблемы

Прошу помощи в вопросе:
Как мне побороть это не успевание или неправильное считывание конвертированного файла?
...
Рейтинг: 0 / 0
09.11.2015, 18:11
    #39098747
\\\\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
Игортан, многа букав...
Если я прально тебя понял, то попробуй вот этот 7340257 вариант от Бенедикта.
...
Рейтинг: 0 / 0
09.11.2015, 18:17
    #39098754
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
Игортан,

Ни ужели никто не конвертировал pdf в txt, чтобы уже потом считать текстовый файл.
Может есть какие подводные камни?
...
Рейтинг: 0 / 0
09.11.2015, 18:18
    #39098757
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
\\\\,

Спасибо, сейчас буду глядеть
...
Рейтинг: 0 / 0
09.11.2015, 18:32
    #39098772
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
\\\\,

По ссылке - идет сборка данных по файлам в папке.
На сколько я понимаю, у меня при проверке нахождения файла в папке Dir и FSO
показывает, что файл есть. И пропускает выполнение кода дальше. И тут же при попытке его прочитать
получаю ="".
Такое чувство, что создается файл с именем, потом заполняется данными из pdf.
Может в момент создания файла (он уже есть) и до заполнения его данными из pdf как раз и происходит попытка считать его.
Если честно только сейчас в голову пришло, может ли такое быть?
Кто знает процесс конвертации файлов глубоко. Подскажите
Я думаю, что сколько бы не было программок для конвертации, они работают по одному принципу.
...
Рейтинг: 0 / 0
09.11.2015, 18:44
    #39098785
\\\\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
Игортан, я не очень представляю работу твоего конвертера (вообще обработка пидиэф-файлов тот ещё изврат, не для этого они созданы, ИМХО), но попробуй вместо события __InstanceCreationEvent (создание) использовать событие __InstanceModificationEvent (изменение).
...
Рейтинг: 0 / 0
09.11.2015, 18:44
    #39098787
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
Игортан,

вот только ПДФ-ки разные
--одни имеют текстовый слой и их можно преобразовать в тхт
--другие --состоят из рисунков, при их сохранении в тхт получаем файлы длиной 2 байта --пустые
...
Рейтинг: 0 / 0
09.11.2015, 18:50
    #39098798
\\\\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
Игортанпоказывает, что файл есть. И пропускает выполнение кода дальше. И тут же при попытке его прочитать
получаю ="".
Игортан, а ошибки у тебя как обрабатываются в данной процедуре? Не игнорирование ли? Текстовый файл скорее всего заболокирован для чтения и должна быть соответствующая ошибка.
Лично мне вот так кааца © Аркадий Райкин
...
Рейтинг: 0 / 0
09.11.2015, 19:24
    #39098835
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
\\\\Игортан, я не очень представляю работу твоего конвертера (вообще обработка пидиэф-файлов тот ещё изврат, не для этого они созданы, ИМХО), но попробуй вместо события __InstanceCreationEvent (создание) использовать событие __InstanceModificationEvent (изменение).
Не понял пока.

ПЕНСИОНЕРКАвот только ПДФ-ки разные
--одни имеют текстовый слой и их можно преобразовать в тхт
--другие --состоят из рисунков, при их сохранении в тхт получаем файлы длиной 2 байта --пустые
Файлы конвертируются нормально.
Т.е. при попытке открыть - все ок. Текст есть. Одно время было, когда буквы/слова в тексте пропадали при попытке считать текст. Я уже не помню, что делал после этого....Уже столько всего пробовал, в разной вариации...

\\\\Игортан, а ошибки у тебя как обрабатываются в данной процедуре? Не игнорирование ли? Текстовый файл скорее всего заблокирован для чтения и должна быть соответствующая ошибка.
Ох, не помню. нету кода под рукой сейчас.
У меня там часть функций при ошибке обнуляет ее и продолжает процесс, часть с нормальной обработкой...
Первое, что проверю когда доберусь до базы.

А чем может быть занят файл - самим процессом программы конвертации?
потому как файлы pdf складирутся в отдельную папку и в момент конвертации и считывания - обращений других нет ни к этой папке в целом не к какому нибудь файлу, кроме запрашиваемого.
Т.е. процесс проходит при одном юзере.
...
Рейтинг: 0 / 0
09.11.2015, 20:46
    #39098882
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
Игортан,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
FileName = "C:\1\1.txt"

f = FreeFile

Open FileName For Input As f
Do While Not EOF(f)
  FileTxt = Input(1, #f)  '''''''это посимвольное чтение, а не чтение строки
  Debug.Print UsefulTxt  '''''''а это непонятно, откуд взято
Loop
Close #f
...
Рейтинг: 0 / 0
10.11.2015, 00:02
    #39098987
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
ПЕНСИОНЕРКА,

Нет, нет.
Это я взял с форума первый попавшийся пример.
Делал относительно давно и когда переделал на FSO, тот кусок кода затер.
А этот пример привел - как принцип
через Open...For ...
вот не могу с наскока быстро найти более правильный пример.
Но он тоже, то работал, то нет. Т.е. в одном импорте мог считать все файлы, если повторить - несколько пропустить. ни какой системы не смог обнаружить почему так.
Но и через FSO результат был тот же
...
Рейтинг: 0 / 0
10.11.2015, 08:02
    #39099126
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
Игортан,

а какой программой вы распознаете --хотелось бы попробовать, заинтересовал вопрос
...
Рейтинг: 0 / 0
10.11.2015, 12:14
    #39099408
Считывание текстовых файлов в цикле
Игортан, покажите, как выглядит строка вызова конвертера.
Если это EXE-шник, и вы используете ф-ю Shell, и он закрывается по завершении конвертации, то попробуйте вместо Shell использовать метод Run из WSHShell - он умеет дожидаться завершения процесса.
...
Рейтинг: 0 / 0
10.11.2015, 12:46
    #39099449
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
ПЕНСИОНЕРКАа какой программой вы распознаете --хотелось бы попробовать, заинтересовал вопрос
pdftotext.exe
правда я ее переименовал в pdftotext.dll (что бы не было ненужных вопросов)

Анатолий ( Киев )Игортан, покажите, как выглядит строка вызова конвертера.
Если это EXE-шник, и вы используете ф-ю Shell, и он закрывается по завершении конвертации, то попробуйте вместо Shell использовать метод Run из WSHShell - он умеет дожидаться завершения процесса.

Код: vbnet
1.
2.
3.
MyProgram = strDBDate1 & "\pdftotext.dll"
RetVal = Shell("""" & MyProgram & """" & " " & """" & strNameFile & """" & " -raw", vbHide)
If RetVal <> 0 Then PdfTxtConvert = True


Анатолий ( Киев )использовать метод Run из WSHShell
нету под рукой примерчика?

\\\\а ошибки у тебя как обрабатываются в данной процедуре? Не игнорирование ли?

ох да. Сбрасывал ошибку и дальше шел....сейчас уберу и если получится на том компе стрельну разок
...
Рейтинг: 0 / 0
10.11.2015, 13:16
    #39099492
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
Игортанох да. Сбрасывал ошибку и дальше шел....сейчас уберу и если получится на том компе стрельну разок
а не проканало.
ошибок нет.
все нормально отрабатывает.
А вот со второго раза - все нормально прокатило.
такое чувство, что пока идет перезапись получившегося файла (как я понимаю - удаление старого и создание нового) - успевает подхватить данные из "старого" файла?

буду попробовать рыть в сторону WSHShell
...
Рейтинг: 0 / 0
10.11.2015, 14:15
    #39099576
Считывание текстовых файлов в цикле
...
Рейтинг: 0 / 0
10.11.2015, 14:26
    #39099590
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
Игортан,

у меня получилась ерунда(демо версия программы)
взяла обычный ворд-документ
на выходе получила аброкадабру
...
Рейтинг: 0 / 0
10.11.2015, 14:26
    #39099591
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
Игортан,

результат
...
Рейтинг: 0 / 0
10.11.2015, 14:56
    #39099635
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
ПЕНСИОНЕРКА,

Вероятно не умеет с кирилицей работать. Но мне и не нужно с кирилицей, потому и не заметил этого изьяна.

WSHShell - запустил.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
MyProgram = strDBDate1 & "\pdftotext.exe"
'RetVal = Shell("""" & MyProgram & """" & " " & """" & strNameFile & """" & " -raw", vbHide)
'If RetVal <> 0 Then PdfTxtConvert = True

Set WshShell = CreateObject("WScript.Shell")
RetVal = WshShell.Run("""" & MyProgram & """" & " " & """" & strNameFile & """" & " -raw", 1, True)
'WshShell.Run """" & MyProgram & """" & " " & """" & strNameFile & """" & " -raw", vbHide, True '1-&#226;&#232;&#228; &#238;&#234;&#237;&#224;, True - &#238;&#230;&#232;&#228;&#224;&#237;&#232;&#229;
Set WshShell = Nothing
If RetVal = 0 Then PdfTxtConvert = True


И даже вроде все гладко пошло!!!

Есть минус:
пришлось переименовать расширение файла на обычное - exe
Есть ли возможность оставить расширение dll?
...
Рейтинг: 0 / 0
10.11.2015, 14:59
    #39099639
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
ПЕНСИОНЕРКА,

и никаких демо, я просто скачал архив - там несколько программок от одного разработчика
в txt, помню картинки вытягивает
если сейчас найду скину сюда
может кому нужно будет

Думаю у нас разные одноименные програмки
...
Рейтинг: 0 / 0
10.11.2015, 15:22
    #39099672
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
Игортан,

архив большой, сюда не лезет - 10метров
кстати - 32/64 версии и варианты конвертации

ссылка на скачивание: 14 дней
https://dropmefiles.com/zngbk
...
Рейтинг: 0 / 0
10.11.2015, 17:16
    #39099869
Считывание текстовых файлов в цикле
ИгортанЕсть минус:
пришлось переименовать расширение файла на обычное - exe
Есть ли возможность оставить расширение dll? Т.е. родной Shell с ДЛЛ-кой работает а крутой WshShell.Run - нет? Странно!
Впрочем, с помощью пары-тройки API функций можно организовать ожидание и для Shell.
Вот первый попавшийся пример , но можете найти еще. Я гуглил по vba shell wait
...
Рейтинг: 0 / 0
10.11.2015, 17:19
    #39099874
Считывание текстовых файлов в цикле
Игортан, а вообще, если переименовали в EXE и опботает, то может и не стоит искать приключений...?
...
Рейтинг: 0 / 0
10.11.2015, 18:38
    #39099961
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
Анатолий ( Киев )Т.е. родной Shell с ДЛЛ-кой работает а крутой WshShell.Run - нет? Странно!
Таки да. Я не сразу допер, почему бьет ошибку, а потом обратил внимание в хелпах, что речь идет об исполняемых файлах. Вероятно что то зашито на расширение exe.

Анатолий ( Киев )Игортан, а вообще, если переименовали в EXE и опботает, то может и не стоит искать приключений...?
тут конечно согласен...
Искать на ж... приключений неохота.
И так процесс не из самых простых. Думал, может есть решение в одну строку.

опана, писал сейчас про разрядность винды...
а может у меня все это из за того, что конвертер мой для 32битной, а тот "неудачный" комп - 64 семерка.
Ну да ладно, обкатаем недельку, дальше будем посмотреть

Всем спасибо за помощь и участие.
По факту вопросы по аксу задаю только здесь, всегда помогали.
Так что и форуму спасибо))
...
Рейтинг: 0 / 0
10.11.2015, 18:41
    #39099964
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание текстовых файлов в цикле
Анатолий ( Киев )Т.е. родной Shell с ДЛЛ-кой работает а крутой WshShell.Run - нет? Странно!

Это не dll, это обычный экзешник.
Я его просто расширение поменял, что бы внешне сходила на библиотеку программы.
Что бы у людей не возникло вопроса, почему стороннее ставим, помимо своего.
Может и не будут спрашивать, но хотелось заранее обойти этот вероятный вопрос
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Считывание текстовых файлов в цикле / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]