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

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

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

Студворк — интернет-сервис помощи студентам
Добрый день!
Возник вопрос проверки наличия данных в файле.
Задача - программой на 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.05.2012, 16:37
Ответы с готовыми решениями:

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

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

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

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

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

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

cmd /c prog.exe > 1.txt

а потом анализирую текстовый файл с инфой
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
25.05.2012, 19:56
O! Замечательно. Вместо этого сделай конвейер!

cmd /c prog.exe | new.exe

Программа new.exe будет ждать, пока prog.exe выплюнет данные в выходной поток, и примет их из своего входного потока. Такое решение подойдет?
0
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
25.05.2012, 20:14  [ТС]
Я думаю для меня это будет сложнее чем первый вариант
Потому как я даже не представляю что такое конвейер применительно к VB и с чем его едят
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
25.05.2012, 20:45
Конвейер - это когда одна программа направляет данные сразу на вход другой, минуя промежуточные файлы. Эта возможность взята из UNIX-а и пользоваться ею удобно. Могу подготовить и выложить пример.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
25.05.2012, 21:07
Собственно вот. Там два проекта. Один генерирует последовательность, а второй принимает. Загляни в исходники. И запусти pusk.cmd
Вложения
Тип файла: zip conv.zip (10.2 Кб, 16 просмотров)
2
 Аватар для Kogb
367 / 128 / 28
Регистрация: 17.07.2011
Сообщений: 253
Записей в блоге: 1
26.05.2012, 00:12
Catstail, здорово! Давно хотел узнать как это сделать.
Хочу предложить и свою версию с помощью shell:
Bash
1
cmd /c c:\prog.exe > c:\1.txt & c:\new.exe
Прога на VB запускается после окончания работы первой проги и записи результатов в файл.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
26.05.2012, 17:55
Тем, кто захочет использовать эту технику. Есть важный ньюанс программа на 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  [ТС]
Цитата Сообщение от Kogb Посмотреть сообщение
Прога на VB запускается после окончания работы первой проги и записи результатов в файл.
Дело в том, что у меня запуск сторонней программы осуществляется внутри кода, и даже не один раз и не одной программы, так что так не выйдет, как вы предлагаете.
И с конвейером видимо тоже не получится по тем же причинам.

Но знания никогда лишними не бывают, так что спасибо всем
0
 Аватар для Kogb
367 / 128 / 28
Регистрация: 17.07.2011
Сообщений: 253
Записей в блоге: 1
28.05.2012, 11:12
Здесь нельзя давать ссылки на чужие сайты, поэтому погугли сам:
HTML5
1
VB запуск программы с ожиданием ее завершения
1
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
28.05.2012, 11:18  [ТС]
Цитата Сообщение от Kogb Посмотреть сообщение
VB запуск программы с ожиданием ее завершения
Дело все в том что программа работу то как бы завершает и файл создается но по факту почему то там нет еще инфы. А появляется она позже после того как в моей программе уже отработал код проверки.
Я так подозреваю, что это проблема даже не столь программы, сколь операционной системы и сети, потому что программа хранится на сетевом диске и там же создается файл. И с такой ситуацией я не впервые столкнулся в нашей сети, натыкались уже на похожие проблемы. Так что скорее всего это связано с сетью, но вот что именно происходит - никто понять не может.
0
 Аватар для Kogb
367 / 128 / 28
Регистрация: 17.07.2011
Сообщений: 253
Записей в блоге: 1
28.05.2012, 14:03
Надо в таком случае добавить еще одну проверку на наличие данных в файлике. Думаю, в принципе первоначальный код подойдет после небольшого изменения:
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.05.2012, 14:03
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru