Форум программистов, компьютерный форум, киберфорум
Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/23: Рейтинг темы: голосов - 23, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 12.10.2010
Сообщений: 25

Последовательный файл на ТБ или VB6

12.10.2010, 15:03. Показов 5188. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуста,не могу сообразить как создать файл с заданными параметрами
1.длина строки 14 записей текстовых, разделители запятые, важно чтоб конец записи обязательно запятая и новая строка
2.количество строк (для начала по запросу)
3.некоторые поля должны быть пустые, последняя запись почти всегда пустая
4.одна из записей дата время, причем если в исходных данных время отсутствует, то добавить из заданного диапазона.
вот образец:
"Name","idNo","DT","Operator","KPKnum"," KPK","Section","Sum1","Sum2","Sum3","Sum 4","Kind","Amount","Session","OpType" ,
,"0","24/06/2010 10:33:00","1","2","50879","1","1.11",,,, "1","1",,"1",
,"1","24/06/2010 10:33:00","1","2","50879",,"1.11",,,,"3" ,,,,
,"2","24/06/2010 10:33:00","1","3","40239",,"1.11","0","0 ","0","4",,"1",,
,"3","01/07/2010 16:30:00","1","4","23714","1","86934.48" ,,,,"1","1",,"1",
,"4","01/07/2010 16:30:00","1","4","23714",,"86934.48",,, ,"3",,,,
,"5","01/07/2010 11:28:00","1","5","6179",,"86934.48","0" ,"0","0","4",,"2",,
В последствии, если получится, данные будут браться из двух других файлов (пока не знаю точно формат предположительно тоже .тхт)

Добавлено через 4 часа 31 минуту
Прошу прощения, я наверное не совсем внятно объяснил.
дело в том, что используя write#1, name,id,, и тд,
последняя запись без запятой, если запись пустая, то ТВ выдает синтаксическую ошибку, а VB6 не ставит перевод строки и следующий оператор write продолжает предыдущую строку
ставлю chr(13) просто добавляет плоский 0.

Направьте на путь истинный, как получить файл по указанному образцу?
Как добавить запятую в конец каждой строки?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.10.2010, 15:03
Ответы с готовыми решениями:

Как конвертировать файлы PDF в TXT или HTML на CBuilder или VB6?
Привет! Столкнулся с такой проблемой, жутко нкждаюсь в помощи. Нужно конвертировать файлы PDF в TXT или HTML. Делаю вид, что работаю на...

Организовать последовательный файл на диске
Организовать последовательный файл на диске. Структура записи для задачи указана ниже. Блок организации файла оформить отдельной...

Задание про последовательный файл
Нужно сделать программу в Visual Basic такого плана: Компьютерная фирма ведет файл со сведениями о двадцати своих сотрудниках....

33
1 / 1 / 0
Регистрация: 12.10.2010
Сообщений: 25
18.10.2010, 18:35  [ТС]
Студворк — интернет-сервис помощи студентам
Dzhej-Dzhej, Cпасибо за разъяснение, но с форматом не получается, в посте №15 я попытался применить формат к дате строка 14. Чтоб было через /, а выводит всеравно через точку.
Visual Basic
1
2
3
4
Text1.Text = Format(MyTime, "mm/dd/yyyy hh:mm:ss")
    s = CStr(MyTime)
    s1 = Left(s, 2) + "/" + Mid(s, 4, 2) + "/" + Right(s, 13)
    Text1.Text = s1
Ну да ладно. Попытаюсь все воедино собрать, потом оформлю в красивый вид и выложу, может ошибки найдете или посоветуете
0
1 / 1 / 0
Регистрация: 12.10.2010
Сообщений: 25
22.10.2010, 08:42  [ТС]
Dzhej-Dzhej
Помогите еще немного, опять застрял на ровном месте. Первая часть (чтения/записи отчета) работает
Теперь вторая, дописать из журнала. Для проверки в прицепе.
Мне нужно из 9 строк каждой записи брать 5-ю строку с суммой (начало с 24 позиции, длина от 0 до 9) и 9-ю строку с датой\временем.
Дата/время читается правильно, а сумма почемуто всегда равна из первой записи.
Посоветуйте, что не так?
Может есть более простые способы решения моей проблеммы?

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
Private Sub Form_Load()
Dim dt As String, st As String, altext As String, sim As String, sum1 As String
Dim l As Integer, i As Integer, n As Integer, k As Integer
Open "D:\VB6\tmp1\jur.txt" For Input As 1
Do Until EOF(1) ' повтор до конца файла
n = 24          ' первая позиция данных в строке
For i = 1 To 4  ' пропускаем служебную инфу
Line Input #1, st
Next i
Line Input #1, st   ' читаем строку с оплатой (5 строка)
Do Until k = 9      ' читаем последовательно до 9=код "ТАБ" 
sim = Mid(st, n, 1) ' каждый символ последовательно, т.к. бывает от 1 до 9 и "ТАБ"
k = Asc(sim)          ' определяем код символа, поймать запятую и "ТАБ"
If k = 44 Then sim = ".": GoTo 1 ' замена запятой
1
n = n + 1           ' на следующую позицию в строке
sum1 = sum1 + sim   ' собираем сумму для передачи
'altext = altext + sim
Loop                ' сборка закончена
For i = 1 To 3      ' пропускаем служебную инфу
Line Input #1, st
Next
Line Input #1, st   ' читаем строку с датой (9 строка)
'   сборка даты + время
dt = Mid(st, 20, 6) + "20" + Mid(st, 26, 2) + " " + Mid(st, 29, 8)
altext = altext + dt + "    " + sum1 'для контроля в TexBox
sum1 = ""   ' обнуляем после передачи
' здесь пытался поймать что мешает собрать сумму
' для следующих строк
'l = Len(st)
'For i = 1 To l
'i = i + 1
'sim = Mid(st, i, 1)
'n = Asc(sim)
'Loop
'n = (i - 1) / 9
'altext = "Simvol №" + Str(i) + "  =  " + sim + "    COD =  " + Str(n) ' + "   " + Mid(st, i, 1)
Text1.Text = Text1 + vbCrLf + altext
'next i
Loop ' Файл закончился.
Close #1
 
End Sub
Вложения
Тип файла: rar jur.rar (971 байт, 20 просмотров)
0
Заблокирован
22.10.2010, 09:20
Visual Basic
1
2
3
4
5
k=0     'просто в следующий шаг цикла переходит k = 9
Do Until k = 9      ' читаем последовательно до 9=код "ТАБ" 
sim = Mid(st, n, 1) ' каждый символ последовательно, т.к. бывает от 1 до 9 и "ТАБ"
k = Asc(sim)
...
так ?
1
1 / 1 / 0
Регистрация: 12.10.2010
Сообщений: 25
22.10.2010, 10:13  [ТС]
Dzhej-Dzhej,
Спасибо, уже нашел, файл формируется правильно, а в ТехВох по две копии строки в одну строчку с переходом куска на новую. Вот переделаный файл, там кусок чтоб ТАБ убирать
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Option Explicit
Private Sub Form_Load()
Dim dt As String, st As String, st1 As String, altext As String, sim As String, sum1 As String
Dim l As Integer, i As Integer, n As Integer, k As Integer
'st - сюда читаем строку
'dt - сюда собираем дату+время
'sum1 - сюда собираем сумму в формате 0.00
'sim - здесь получаем символ из конкретной позиции
'altext - собираем сторку для контроля в ТехВох
'k - здесь получаем код символа
'l - это для длины строки\файла
Open "D:\VB6\tmp1\jur.txt" For Input As 1   'For Input
Open "D:\VB6\tmp1\tstjur.txt" For Output As 2 'For Write
Do Until EOF(1) ' повтор до конца файла
         
For i = 1 To 4  ' пропускаем служебную инфу
Line Input #1, st
Next i
Line Input #1, st   ' читаем строку с оплатой
k = 0   ' обнуляем код
n = 24  ' первая позиция данных в строке
Do Until k = 9      ' читаем последовательно до "ТАБ"
sim = Mid(st, n, 1)
k = Asc(sim)
If k = 44 Then sim = ".": GoTo 1 ' замена запятой
1
n = n + 1           ' это счетчик позиции в строке
st1 = st1 + sim   ' собираем сумму для передачи
 
'altext = altext + sim
Loop                ' сборка закончена
k = 0
sum1 = st1
l = Len(st1)
sum1 = Left(sum1, (l - 1))  ' убираем ТАБ в конце строки
For i = 1 To 3      ' пропускаем служебную инфу
Line Input #1, st
Next
Line Input #1, st   ' читаем строку с датой
'   сборка даты + время
dt = Mid(st, 20, 6) + "20" + Mid(st, 26, 2) + " " + Mid(st, 29, 8)
altext = altext + dt + "    " + sum1 'для контроля в TexBox
Write #2, dt, "    ", sum1
sum1 = ""   ' обнуляем после передачи
 
' здесь пытался поймать что мешает собрать сумму
' для следующих строк
'l = Len(st)
'For i = 1 To l
'i = i + 1
'sim = Mid(st, i, 1)
'n = Asc(sim)
'Loop
'n = (i - 1) / 9
'altext = "Simvol №" + Str(i) + "  =  " + sim + "    COD =  " + Str(n) ' + "   " + Mid(st, i, 1)
Text1.Text = Text1 + vbCrLf + altext
'next i
st1 = ""
Loop ' Файл закончился.
Close #1
Close #2
End Sub
0
Заблокирован
22.10.2010, 10:30
здесь еще можно строку 42 предыдущего поста так переписать
Visual Basic
1
Text1.Text = Text1 + vbCrLf + dt + "    " + sum1 'для контроля в TexBox
56-ю выкинуть
1
1 / 1 / 0
Регистрация: 12.10.2010
Сообщений: 25
22.10.2010, 12:45  [ТС]
Dzhej-Dzhej, Спасибо, получилось.
Значит перевод строки нужно ставить перед новыми данными, а не после них.
Прога в черновом варианте почти как надо работает.
Но опять загвоздка, получил тестовый файл журнала, а там не все записи имеют по 9 строк.
Я прям растерялся, есть по 5 сторок, есть по 7, по 12 и более.
Вы как опытный программист не посоветуете, как это можно побороть?
Образцы в прицепе.
В конце второго файла есть есть данные с сумами, но в операции ОТМЕНЕН,их нужно отсеять, а в образцах суммовые продажи больше 1 строчки их нужно записать.
Вложения
Тип файла: rar Obrazes.rar (495 байт, 11 просмотров)
Тип файла: rar 9402250 140710.rar (561 байт, 17 просмотров)
0
Заблокирован
25.10.2010, 16:55
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
Option Explicit
Private Sub Form_Load()
Dim dt As String, st As String, sum1 As String
'st - сюда читаем строку
'dt - сюда собираем дату+время
'sum1 - сюда собираем сумму в формате 0.00
Open App.Path + "\Obrazes.txt" For Input As 1  'For Input
Open App.Path + "\tstjur.txt" For Output As 2 'For Write
Do Until EOF(1) ' 
'On Error Resume Next
    Line Input #1, st
    st = Replace(st, ",", ".", 1, 1, vbTextCompare)
    Dim mas() As String
    If (InStr(1, st, "Чек №", 1) > 0) Then
        dt = Mid(st, 16, 6) + "20" + Mid(st, 22, 2) + Mid(st, 26, 9)
    End If
    If (InStr(1, st, "Оплата чека", vbTextCompare) > 0) Then
        mas = Split(st, vbTab, -1, vbTextCompare)
        sum1 = mas(3)
        If (IsNumeric(sum1)) Then
            Write #2, dt, "    ", sum1
            Text1.Text = Text1.Text + vbCrLf + dt + "    " + sum1  ' в TexBox
            dt = ""
            sum1 = ""
        End If
    End If
Loop ' 
Close #1
Close #2
End Sub
1
1 / 1 / 0
Регистрация: 12.10.2010
Сообщений: 25
26.10.2010, 12:46  [ТС]
Dzhej-Dzhej,
Спасибо, Вы мне очень помогаете.
Только не совсем понятно, как это работает?
1. строки 7,8 App.Path - что для него текущий каталог?
2. Почему то записывает только последний чек
И еще что то не получается выбрать файл через CommonDialog1
вот кусок кода:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Option Explicit
 
Private Sub Form_Load()
Dim namein As String, nameout As String ' это для выбора файла
CommonDialog1.ShowOpen
CommonDialog1.Filter = txt And rtf ' здесь нужно показать только *.txt and *.rtf, не работает
CommonDialog1.Flags = &H400' запрет других расширений
 
namein = CommonDialog1.FileName' файл для чтения
Text1.Text = "Выбран файл  " & namein' для контроля
Open namein For Input As 1 'For Input
' здесь программа
'
close
End Sub
0
Заблокирован
26.10.2010, 13:50
Цитата Сообщение от jon_mb Посмотреть сообщение
App.Path - что для него текущий каталог?
каталог, в котором находится программа(*.exe) или проект(.vbp)
Цитата Сообщение от jon_mb Посмотреть сообщение
Почему то записывает только последний чек
или Text1.Text = Text1.Text + ... забыли
или нужно смотреть файл App.Path + "\tstjur.txt"
или поменялись данные файла "образец.txt" (я там сделал довольно грубый парсинг, нужно смотреть по позициям символов в строках)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Option Explicit
 Private Sub Form_Load()
    Dim namein As String, nameout As String
    CommonDialog1.Filter = "Text *.txt;*.rtf|*.txt;*.rtf"
    CommonDialog1.Flags = &H400
    CommonDialog1.ShowOpen
    namein = CommonDialog1.FileName
    Text1.Text = "Выбран файл  " & namein
    Open namein For Input As 1
    ' çäåñü ïðîãðàììà
    '
    Close 1
End Sub
вначале прописываем свойства, а потом уже .ShowOpen
1
1 / 1 / 0
Регистрация: 12.10.2010
Сообщений: 25
26.10.2010, 16:13  [ТС]
Dzhej-Dzhej
Большое спасибо.
Сейчас усиленно просеиваю инет в поисках описания примененных ВАМИ функций.
Что то мая литература слишком урезанная И.Сафронов "Visual Basic в задачах и примерах"
В принципе идея понятна. Прога работает в полуручном режиме. Осталось привести в более практичный вид.
Ну и продолжать автоматизацию процесса.
если интересно могу выслать почти готовый проект.
0
Заблокирован
26.10.2010, 16:30
Цитата Сообщение от jon_mb Посмотреть сообщение
Сейчас усиленно просеиваю инет в поисках описания примененных ВАМИ функций.
лучше поставить MSDN, и если все нормально настроить, можно будет пользоваться так:
навел курсор мыши на необходимое слово, кликнул, нажал F1 и вылетаеш в MSDN на нужной странице

Цитата Сообщение от jon_mb Посмотреть сообщение
если интересно могу выслать почти готовый проект.
да у меня, как-то, своих хватает, разве что если нужна будет еще помощь
0
1 / 1 / 0
Регистрация: 12.10.2010
Сообщений: 25
27.10.2010, 08:13  [ТС]
Dzhej-Dzhej, Спасибо Вам за помощь, но подскажите еще пожалуста.
не понятна строка
Visual Basic
1
If (InStr(1, st, "Чек №", 1) > 0) Then
назначение 1 после "Чек №", ведь InStr принимает 3 параметра (позиция поиска, строка, искомое выражение)

Не понял как работает здесь замена
Visual Basic
1
st = Replace(st, ",", ".", 1, 1, vbTextCompare)
и что такое vbTextCompare, знаю что константа и равна 1

Еще строка
Visual Basic
1
mas = Split(st, vbTab, -1, vbTextCompare)
ведь mas это массив, а индекс какой? и опятьже vbTab это количество ТАБов, -1 это что?

в этой строке проверка sum1 на число?
Visual Basic
1
If (IsNumeric(sum1)) Then
0
Заблокирован
27.10.2010, 08:49
Цитата Сообщение от jon_mb Посмотреть сообщение
не понятна строка Код Visual Basic
1
If (InStr(1, st, "Чек №", 1) > 0) Then
единица - тот же самый vbTextCompare(без разницы, большие буквы или малые)
vbBinaryCompare - поиск по символам (А и а - разные вещи)
Цитата Сообщение от jon_mb Посмотреть сообщение
st = Replace(st, ",", ".", 1, 1, vbTextCompare)
две единицы: заменяем с первого символа и проводим всего одну замену(-1 - все замены)
Цитата Сообщение от jon_mb Посмотреть сообщение
mas = Split(st, vbTab, -1, vbTextCompare)
заполняем mas с количеством строк, на сколько разбил строку Split
можно посмотреть все строки в цикле от LBound(mas) до UBound(mas)
vbTab - символ-разделитель
на третьем месте количество строк (-1 - все строки)
в этой строке проверка sum1 на число?
If (IsNumeric(sum1)) Then
да

я просто спешил и никак не получалось дробное число, вот и нагородил
1
1 / 1 / 0
Регистрация: 12.10.2010
Сообщений: 25
27.10.2010, 10:35  [ТС]
Dzhej-Dzhej, Спасибо огромное, буду пытаться применить это в своей программе.
Оказывается не все версии MSDN дружат с VB6, народ пишет что нужно декабрь 2001, а ее нет на сайте микрософт. Буду искать в Р2Р
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.10.2010, 10:35

Записать в последовательный файл f случайные числа
Записать в последовательный файл f случайные числа, в файле g получить компоненты, являющиеся четными числами.

Многопоточная программа. Последовательный вывод в общий файл
Доброго времени суток! Помогите пожааалуйста..... Необходимо разработать программу, состоящую из 3 потоков. В среде разработки - Eclipse....

Vb6 или vb.net?
Приветствую всех. Интересует, что лучше на данный момент. VB6 или VB.net. Программировать нужно исключительно под Windows, нужна...

Сформировать типизированный последовательный файл, компоненты которого вычисляются по формуле
1.Сформировать типизированный последовательный файл, компоненты которого вычисляются по формуле, F=\sqrt{2+\sqrt{2+\sqrt{...+2}}}, i -...

Последовательный и быстрый последовательный поиски
Разработать программу для реализации алгоритма последовательного поиска. Написала программу для быстрого последовательного поиска, не...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru