Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
1

Как проверить наличие информации в файле

25.05.2012, 16:37. Показов 1451. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
Возник вопрос проверки наличия данных в файле.
Задача - программой на VB отследить наличие и считать информацию из текстового файла, который в этот момент создает другая программа.
Столкнулся с проблемой - файл создан и вроде бы как есть, но он пустой - еще ничего не записано в него.
после мучительных размышлений родился такой вот код проверки
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    Dim s as string
    s = ""
    While s = ""
        Open "1.txt" For Input As #f
        If Err Then
            Text1.Text = "Не могу открыть файл!"
            Exit Sub
        End If
        Do While Not EOF(f)
            Line Input #f, s
            Exit Do
        Loop
        doPause (1)
        Close #f
    Wend
doPause (1) - реализована простейшая функция задержки выполнения кода

Собственно может быть кто то подскажет как эту проверку проще сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.05.2012, 16:37
Ответы с готовыми решениями:

Как проверить элемент на наличие?
Privet Vsem. Pojalusta pomagite reshit odnu problemu. Ya dinamicheski sozdayu element(picture)...

Как проверить строку на наличие определенных символов?
Здравствуйте! Вот у меня, напр., есть текст, и строка из некоторых символов. Мне надо узнать,...

Проверить наличие файла в папке
Доброго вечера форумчане! подскажите что не правильно в моем коде, перестал работать, пытаюсь...

Проверить наличие в массиве повторяющихся элементов
Здравствуйте... Надеюсь на вашу помощь) С клавиатуры вводится массив целых чисел A размером N....

14
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
25.05.2012, 17:09 2
0) с виду все более-менее
1) Если при открытии файла происходит ошибка - программа завершится. А должна?
2) Передавать информацию через файл - это не очень хорошее решение. В Windows существует много способов межпроцессорного взаимодействия. Лучше использовать какой-либо из них.
1
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
25.05.2012, 17:27  [ТС] 3
1 - да, должна, потому что не получив данные дальнейшая работа бессмысленна
2 - по другому никак, поскольку в файлик записываются данные сторонней программой, к которым я не смог подобраться из VB. В частности номер ключа HASP.
Если кто-то подскажет какие то библиотеки для работы с HASP из VB буду очень благодарен.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
25.05.2012, 18:07 4
Если файл не удалось открыть, то возможно удастся в следующем цикле.

А откуда сторонняя программа берет имя файла?
0
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
25.05.2012, 18:23  [ТС] 5
Цитата Сообщение от Catstail Посмотреть сообщение
Если файл не удалось открыть, то возможно удастся в следующем цикле.

А откуда сторонняя программа берет имя файла?
Если файл не удалось открыть то я предполагаю что его как бы нет - всяко же бывает в жизни - надо все предусмотреть.
а стороннюю программу я запускаю через shell примерно так:

cmd /c prog.exe > 1.txt

а потом анализирую текстовый файл с инфой
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
25.05.2012, 19:56 6
O! Замечательно. Вместо этого сделай конвейер!

cmd /c prog.exe | new.exe

Программа new.exe будет ждать, пока prog.exe выплюнет данные в выходной поток, и примет их из своего входного потока. Такое решение подойдет?
0
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
25.05.2012, 20:14  [ТС] 7
Я думаю для меня это будет сложнее чем первый вариант
Потому как я даже не представляю что такое конвейер применительно к VB и с чем его едят
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
25.05.2012, 20:45 8
Конвейер - это когда одна программа направляет данные сразу на вход другой, минуя промежуточные файлы. Эта возможность взята из UNIX-а и пользоваться ею удобно. Могу подготовить и выложить пример.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
25.05.2012, 21:07 9
Собственно вот. Там два проекта. Один генерирует последовательность, а второй принимает. Загляни в исходники. И запусти pusk.cmd
Вложения
Тип файла: zip conv.zip (10.2 Кб, 16 просмотров)
2
366 / 127 / 28
Регистрация: 17.07.2011
Сообщений: 253
Записей в блоге: 1
26.05.2012, 00:12 10
Catstail, здорово! Давно хотел узнать как это сделать.
Хочу предложить и свою версию с помощью shell:
Bash
1
cmd /c c:\prog.exe > c:\1.txt & c:\new.exe
Прога на VB запускается после окончания работы первой проги и записи результатов в файл.
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
26.05.2012, 17:55 11
Тем, кто захочет использовать эту технику. Есть важный ньюанс программа на VB после компиляции не запустится как консольное приложение (с доступом к стандартным хэндлам ввода/вывода). Сначала нужно в PE-заголовке установить признак консольного приложения. Для этого прилагается программа MakeCon.exe. (Не моя, нашел в Сети). После трансляции вашей программы, запустите MakeCon, в списке файлов выберите вашу свежескомпилированную программу и нажмите Enter.

Программа MakeCon модифицирует PE-заголовок выбранного экзешника:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Sub Main()
Dim sFile As String
sFile = Command$
If Len(sFile) = 0 Then
    With Form1.CommonDialog1
        On Error GoTo Quit
        .Flags = cdlOFNFileMustExist Or cdlOFNExplorer
        .Filter = "Executables (*.exe)|*.exe|All Files|*.*"
        .CancelError = True
        .ShowOpen
        On Error GoTo 0
        sFile = .FileName
    End With
    Unload Form1
End If
If Len(Dir(sFile)) = 0 Then GoTo Failed
 
Dim i As Integer
Dim l As Long
 
Open sFile For Binary As 1
Get 1, 1, i
If i <> 23117 Then  ' MZ
    Close 1
    GoTo Failed
End If
 
Get 1, &H3C + 1, l
Get 1, l + 1, i
If i <> 17744 Then  ' PE
    Close 1
    GoTo Failed
End If
 
Put 1, l + &H5C + 1, CLng(3)
 
Close 1
 
MsgBox "Done.", vbInformation
Exit Sub
 
Failed:
MsgBox "Failed.", vbCritical
 
Quit:
End Sub
Удачи!
1
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
28.05.2012, 10:50  [ТС] 12
Цитата Сообщение от Kogb Посмотреть сообщение
Прога на VB запускается после окончания работы первой проги и записи результатов в файл.
Дело в том, что у меня запуск сторонней программы осуществляется внутри кода, и даже не один раз и не одной программы, так что так не выйдет, как вы предлагаете.
И с конвейером видимо тоже не получится по тем же причинам.

Но знания никогда лишними не бывают, так что спасибо всем
0
366 / 127 / 28
Регистрация: 17.07.2011
Сообщений: 253
Записей в блоге: 1
28.05.2012, 11:12 13
Здесь нельзя давать ссылки на чужие сайты, поэтому погугли сам:
HTML5
1
VB запуск программы с ожиданием ее завершения
1
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
28.05.2012, 11:18  [ТС] 14
Цитата Сообщение от Kogb Посмотреть сообщение
VB запуск программы с ожиданием ее завершения
Дело все в том что программа работу то как бы завершает и файл создается но по факту почему то там нет еще инфы. А появляется она позже после того как в моей программе уже отработал код проверки.
Я так подозреваю, что это проблема даже не столь программы, сколь операционной системы и сети, потому что программа хранится на сетевом диске и там же создается файл. И с такой ситуацией я не впервые столкнулся в нашей сети, натыкались уже на похожие проблемы. Так что скорее всего это связано с сетью, но вот что именно происходит - никто понять не может.
0
366 / 127 / 28
Регистрация: 17.07.2011
Сообщений: 253
Записей в блоге: 1
28.05.2012, 14:03 15
Надо в таком случае добавить еще одну проверку на наличие данных в файлике. Думаю, в принципе первоначальный код подойдет после небольшого изменения:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Dim f As Long, p As String, s As String
p = "c:\1.txt"
While Dir(p) = "" 'ждем когда создастся файл
doPause (1) 'пауза 1 сек. в цикле чтобы не было 100% загрузки проца, можно меньше
Wend
While Len(p) = 0 'ждем когда появятся в нем данные
doPause (1)
Wend
doPause (1)' пауза на всякий случай, раз есть лаги в сети, чтоб закрылся нормально
f = FreeFile
Open p For Input As #f
Line Input #f, s 'считываем первую строку
Close #f
0
28.05.2012, 14:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2012, 14:03
Помогаю со студенческими работами здесь

Проверить наличие символа в строке, считанной из файла
Доброго времени суток Уважаемые форумчане! сразу скажу, что по форуму искал, ничего путного не...

Проверить наличие значения в файле
Здравствуйте. VB 2010 Стоит задача поиска проводов, реле, предохранителей на электрической схеме....

Проверить наличие строки в txt файле
Ребятя, помогите реализовать поиск строки, например &quot;блаблабла&quot; в txt файле Если же она...

Проверить на наличие колонки в DBF файле
При загрузке файлов формата DBF в нескольких файлах существует колонка ДБФ.PR_DDK, а в некоторых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru