Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 24.02.2015
Сообщений: 12
1

Ошибка компиляции BAS-файла

24.02.2015, 21:31. Показов 2130. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Для начала. Модуль писался отцом в 2009. Отца уже нету. EXE-шник работает. При запуске он составляет плейлисты с определенными параметрами. Проблема в том, что в ini-файле можно задать только одно время для формирования плейлистов. При добавлении второго времени модуль берет значение из последней строчки. То-есть составляет только один блок плейлистов. Мне же нужно, что б таких блоков создавалось два. На утро и на вечер для примера.

Вариантов реализации я видел 2.
1. Изменение параметров кода для получения возможности чтения из ini-файла нескольких значений времени. Для меня практически не подъемная задача, поскольку мне до понятий программирования как до луны на корточках.
2. Создание клона этого модуля с другим названием самого файла и с другим названием ini-файла в самом коде. Тогда за утренний блок будет отвечать один модуль, а за вечерний - другой.

От отца у меня остались BAS-файл и скомпилированный из него рабочий EXE-шник. На его машине BAS ассоциирован с QBX.EXE. Рядом с QBX.EXE лежат файлы QBX.INI и QBX.KEY (видимо с настройками компиляции... не знаю). На сколько я понимаю - это компилятор именно QuickBasic 4.5? Вот тут я и столкнулся с проблемой. При попытке создать новый EXE-шник выдаёт 12 ошибок в синтаксисе...! Но отец же как-то его скомпилировал!

Вот сам код.

Кликните здесь для просмотра всего текста


QBasic/QuickBASIC
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
COMMON SHARED Air$, LOG$
DECLARE FUNCTION TIMEINC$ (start$, l)
DECLARE FUNCTION CHECKFILE (object$)
CLS
IF VAL(LEFT$(TIME$, 2)) < 3 THEN END
'=============================================================================
root$ = LEFT$(CURDIR$(""), 3): Air$ = root$ + "Air\": CHDIR Air$ + "musicday"
IF DIR$("musicday.ds") <> "" THEN END
OPEN Air$ + "ini\musicday.ini" FOR INPUT AS #1
  DO UNTIL EOF(1)
  LINE INPUT #1, x$
  IF INSTR(x$, "dir =") > 0 THEN wdir$ = LTRIM$((MID$(x$, 6, LEN(x$) - 5)))
  IF INSTR(x$, "start =") > 0 THEN start$ = LTRIM$((MID$(x$, 8, LEN(x$) - 7)))
  LOOP: CLOSE #1
    IF wdir$ <> "" THEN
    wdir$ = wdir$ + LEFT$(DATE$, 2) + "\" + MID$(DATE$, 4, 2) + "\"
    ELSE
    END
    END IF
IF DIR$(wdir$) = "" THEN END
'-----------------------------------------------------------------------------
OPEN "musicday.ds" FOR OUTPUT AS #1: PRINT #1, TIMER + 5: CLOSE #1
pool$ = Air$ + "pool\": LOG$ = Air$ + "log\"
elements$ = Air$ + "musicday\elements\"
SHELL "cmd /C DIR /B /O:N " + wdir$ + "*.mp3 >pool.tmp"
SHELL "doswin pool.tmp pool.tmp"
'=============================================================================
'------------------------------------------------------- фильтр смонтированных
OPEN "pool.tmp" FOR INPUT AS #1: OPEN "pool.txt" FOR OUTPUT AS #2
  DO UNTIL EOF(1): LINE INPUT #1, x$
  y$ = "": OPEN LOG$ + "event.log" FOR INPUT AS #3
    DO UNTIL EOF(3): LINE INPUT #3, y$: IF INSTR(y$, x$) > 0 THEN EXIT DO
    LOOP: CLOSE #3: IF INSTR(y$, x$) = 0 THEN PRINT #2, x$
  LOOP: CLOSE #1: CLOSE #2
'----------------------------------------------------- отработка фиксированных
OPEN "pool.txt" FOR INPUT AS #1: OPEN "pool.tmp" FOR OUTPUT AS #2
OPEN "pool.xxx" FOR OUTPUT AS #3: score = 0
  DO UNTIL EOF(1): LINE INPUT #1, x$
    IF INSTR(x$, "@") > 0 THEN
    PRINT #3, x$
    ELSE
    PRINT #2, x$: score = score + 1
    END IF
  LOOP: CLOSE #1: CLOSE #2: CLOSE #3
'-----------------------------------------------------------------------------
truetime$ = LEFT$(TIME$, 2) + MID$(TIME$, 4, 2)
IF VAL(start$) <= VAL(truetime$) THEN start$ = TIMEINC$(truetime$, 600)
ll = 0: OPEN "pool.tmp" FOR INPUT AS #1
  DO UNTIL EOF(1): LINE INPUT #1, x$
  l = CHECKFILE(wdir$ + x$)
    IF l > 0 THEN
      IF ll = 0 THEN
        IF INSTR(x$, "(dead)") = 0 THEN
        liner$ = elements$ + "Цей день в iсторii музики.mp3"
        ELSE
        liner$ = elements$ + "Цей день (iнструментальний лайнер).mp3"
        END IF
      ELSE
      liner$ = elements$ + "Цей день в iсторii музики (лайнер).mp3"
      END IF
    OPEN "pool.txt" FOR OUTPUT AS #2: PRINT #2, liner$
    PRINT #2, wdir$ + x$: score = score - 1
      IF score = 0 AND INSTR(x$, "final") = 0 THEN
      PRINT #2, elements$ + "Цей день в iсторii музики (фiнал).mp3"
      ELSE
      END IF
    CLOSE #2
 
    OPEN "x.tmp" FOR OUTPUT AS #2: PRINT #2, x$: CLOSE #2
    SHELL "windos x.tmp x.tmp"
    OPEN "x.tmp" FOR INPUT AS #2: LINE INPUT #2, y$: CLOSE #2: KILL "x.tmp"
    bat$ = "move pool.txt " + CHR$(34) + pool$ + start$
 
    bat$ = bat$ + " " + MID$(y$, 2, LEN(y$) - 5) + ".m3u" + CHR$(34)
    OPEN "musicday.bat" FOR OUTPUT AS #2: PRINT #2, bat$: CLOSE #2
    SHELL "cmd /c musicday.bat": KILL "musicday.bat": ll = ll + l
    OPEN LOG$ + "event.log" FOR APPEND AS #2: PRINT #2, wdir$ + x$: CLOSE #2
    start$ = TIMEINC$(start$, l)
    ELSE
    END IF
  LOOP: CLOSE #1: KILL "pool.tmp"
'-----------------------------------------------------------------------------
OPEN "pool.xxx" FOR INPUT AS #1
  DO UNTIL EOF(1): LINE INPUT #1, x$
  l = CHECKFILE(wdir$ + x$)
    IF l > 0 THEN
    OPEN "pool.txt" FOR OUTPUT AS #2
    PRINT #2, elements$ + "Цей день (iнструментальний лайнер).mp3"
    PRINT #2, wdir$ + x$: CLOSE #2
      start$ = MID$(x$, INSTR(x$, "@") + 1, 4)
      IF VAL(start$) <= VAL(truetime$) THEN start$ = TIMEINC$(start$, 1800)
      bat$ = "move pool.txt " + CHR$(34) + start$
 
    OPEN "x.tmp" FOR OUTPUT AS #2: PRINT #2, x$: CLOSE #2
    SHELL "windos x.tmp x.tmp"
    OPEN "x.tmp" FOR INPUT AS #2: LINE INPUT #2, y$: CLOSE #2: KILL "x.tmp"
      bat$ = "move pool.txt " + CHR$(34) + pool$ + start$
 
      bat$ = bat$ + " " + MID$(y$, 6, LEN(y$) - 9) + ".m3u" + CHR$(34)
      OPEN "musicday.bat" FOR OUTPUT AS #2: PRINT #2, bat$: CLOSE #2
      SHELL "cmd /c musicday.bat": KILL "musicday.bat"
    OPEN LOG$ + "event.log" FOR APPEND AS #2: PRINT #2, wdir$ + x$: CLOSE #2
    ELSE
    END IF
  LOOP: CLOSE #1: KILL "pool.xxx"
'=============================================================================
IF DIR$("musicday.ds") <> "" THEN KILL "musicday.ds"
END
 
'=============================================================================
FUNCTION CHECKFILE (object$)
'-----------------------------------------------------------------------------
ww = FREEFILE
OPEN "musicday.ds" FOR OUTPUT AS #ww: PRINT #ww, TIMER + 20: CLOSE #ww
'-----------------------------------------------------------------------------
OPEN "x.tmp" FOR OUTPUT AS #ww: PRINT #ww, object$: CLOSE #ww
SHELL "windos x.tmp x.tmp"
OPEN "x.tmp" FOR INPUT AS #ww: LINE INPUT #ww, dosx$: CLOSE #ww: KILL "x.tmp"
'-----------------------------------------------------------------------------
IF DIR$("temp.mp3") <> "" THEN KILL "temp.mp3"
IF DIR$("temp.bat") <> "" THEN KILL "temp.bat"
OPEN "temp.bat" FOR OUTPUT AS #ww
PRINT #ww, "copy " + CHR$(34) + dosx$ + CHR$(34) + " temp.mp3"
CLOSE #ww: SHELL "cmd /c temp.bat": KILL "temp.bat"
'---------------------------------------------------- определение длительности
SHELL "cmd /c avinfo --raw temp.mp3 > i.tmp"
l = 0: OPEN "i.tmp" FOR INPUT AS #ww
  DO UNTIL EOF(ww): LINE INPUT #ww, ww$
  IF INSTR(ww$, "a1.l=") > 0 THEN l = VAL(MID$(ww$, 6, 6)): EXIT DO
  LOOP: CLOSE #ww: KILL "i.tmp"
'---------------------------------------------- исключение повторной обработки
OPEN LOG$ + "remount.log" FOR INPUT AS #ww
  DO UNTIL EOF(ww): LINE INPUT #ww, goodfile$
  IF object$ = goodfile$ THEN CLOSE #ww: GOTO Endcheck
  LOOP: CLOSE #ww
OPEN "musicday.ds" FOR OUTPUT AS #ww: PRINT #ww, TIMER + l: CLOSE #ww
'----------------------------------------------------------- пересемплирование
IF DIR$("new.mp3") <> "" THEN KILL "new.mp3"
SHELL "cmd /c lame -h --resample 44.1 temp.mp3 new.mp3"
IF DIR$("new.mp3") <> "" AND DIR$("temp.mp3") <> "" THEN KILL "temp.mp3"
SHELL "cmd /c mp3gain /r /c new.mp3"
  IF INSTR(object$, Air$) = 0 THEN
  SHELL "cmd /c mp3cut new.mp3 40"
  IF DIR$("new.old") <> "" THEN KILL "new.old"
  ELSE
  END IF
'------------------------------------------------------ уточнение длительности
SHELL "cmd /c avinfo --raw new.mp3 > i.tmp"
l = 0: OPEN "i.tmp" FOR INPUT AS #ww: DO UNTIL EOF(ww): LINE INPUT #ww, ww$
  IF INSTR(ww$, "a1.l=") > 0 THEN l = VAL(MID$(ww$, 6, 6)): EXIT DO
  LOOP: CLOSE #ww: KILL "i.tmp"
'-----------------------------------------------------------------------------
IF l > 0 THEN
  IF DIR$("temp.bat") <> "" THEN KILL "temp.bat"
  OPEN "temp.bat" FOR OUTPUT AS #ww
  PRINT #ww, "copy new.mp3 " + CHR$(34) + dosx$ + CHR$(34)
  CLOSE #ww: SHELL "cmd /c temp.bat": KILL "temp.bat"
  IF DIR$("new.mp3") <> "" THEN KILL "new.mp3"
  OPEN LOG$ + "remount.log" FOR APPEND AS #ww: PRINT #ww, object$: CLOSE #ww
ELSE
END IF
'-----------------------------------------------------------------------------
OPEN "musicday.ds" FOR OUTPUT AS #ww: PRINT #ww, TIMER + 5: CLOSE #ww
Endcheck:
CHECKFILE = l
'-----------------------------------------------------------------------------
END FUNCTION
 
'=============================================================================
FUNCTION TIMEINC$ (start$, l)
startsec = 3600 * VAL(LEFT$(start$, 2)) + 60 * VAL(MID$(start$, 3, 2)) + l
starth = INT(startsec / 3600): starth$ = LTRIM$(RTRIM$(STR$(starth)))
IF LEN(starth$) = 1 THEN starth$ = "0" + starth$
startm = INT((startsec - (starth * 3600)) / 60)
startm$ = LTRIM$(RTRIM$(STR$(startm)))
IF LEN(startm$) = 1 THEN startm$ = "0" + startm$
TIMEINC$ = LEFT$(starth$ + startm$, 4)
'-----------------------------------------------------------------------------
END FUNCTION


Прикрепляю и сам BAS-файл. Может кто поможет иль подскажет.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.02.2015, 21:31
Ответы с готовыми решениями:

Как открыть BAS-файл для редактирования?
Собственно говоря я знал два основных способа. 1. Надо запустить QBasic и через меню указать...

Импорт файла *.bas с макросами для использования на другом ПК
я создал макросы на одном компе, сохранил как *.bas, как теперь мне вставить эти макросы в ворд...

Ошибка компиляции файла
Здравствуйте! Набросал два файла с кодом вроди все нормально, но при компиляции файла String.h...

Ошибка в компиляции файла Cython
Привет! Создаём .pyx-файл с любым кодом, вбиваем в cmd cython fib.pyx -o fib.c на выходе .с-файл...

18
0 / 0 / 0
Регистрация: 24.02.2015
Сообщений: 12
24.02.2015, 21:45  [ТС] 2
Вот и сам файлик
Вложения
Тип файла: 7z MUSICDAY.7z (1.8 Кб, 8 просмотров)
0
Заблокирован
25.02.2015, 09:12 3
iVladimir, при всем уважении к произведению Вашего ОТЦА (от 2009 года)
Цитата Сообщение от гугл
Что же касается оснащения техникой, то не будем забывать, что многие из нас три года назад еще работали на ДВК или "Искра-266" и об IBM PC AT 286 могли только мечтать.
=Мир ПК №5 1992 г.=
- http://sht-rajvo.narod.ru/msdos.htm
Давайте посмотрим на жизнь с немножко новых реалий?
0
0 / 0 / 0
Регистрация: 24.02.2015
Сообщений: 12
25.02.2015, 13:58  [ТС] 4
Цитата Сообщение от Апострофф Посмотреть сообщение
Давайте посмотрим на жизнь с немножко новых реалий?
Уже смотрю. Заказал новую программу на С++. Уже давненько. Но учитывая ее особенности дело продвигается туго. Возможно мне просто тугой исполнитель попался, я ж в этом не разбираюсь. Хотите - перешлю Вам в личку ТЗ на программу. Оцените, сколько такая работа может потребовать времени.

А внести изменения в эфир нужно сейчас.
0
5859 / 2576 / 281
Регистрация: 28.10.2011
Сообщений: 9,754
Записей в блоге: 6
25.02.2015, 14:59 5
Цитата Сообщение от iVladimir Посмотреть сообщение
Заказал новую программу на С++.
По моему проще будет переписать на современный бейсик.
0
0 / 0 / 0
Регистрация: 24.02.2015
Сообщений: 12
25.02.2015, 15:16  [ТС] 6
Цитата Сообщение от locm Посмотреть сообщение
По моему проще будет переписать на современный бейсик.
Возможно.... только
Цитата Сообщение от iVladimir Посмотреть сообщение
мне до понятий программирования как до луны на корточках
Только таких модулей около 20-ти. Этот самый маленький. И не в каждом я уверен, за что он отвечает.

Именно по этому я сделал ТЗ на новую программу. С интерфейсом и т.д. Вордовский документ на 25 страниц с рисунками и детальным описанием функций. Мне по большому счету по барабану, на чем она будет написана. Поиск фрилансера на сайте окончился для меня неподьемной суммой. А тот, которого нашел у себя в городе - тормозит ((
0
locm
25.02.2015, 16:21
  #7

Не по теме:

Цитата Сообщение от iVladimir Посмотреть сообщение
Только таких модулей около 20-ти. Этот самый маленький.
Цитата Сообщение от iVladimir Посмотреть сообщение
Поиск фрилансера на сайте окончился для меня неподьемной суммой.
Чем больше сложность работы, тем выше цена. И если за перевод кода в первом сообщении можно взять 500 рублей (к примеру), то за всю работу может выйти 20 тысяч, а то и больше.

Цитата Сообщение от iVladimir Посмотреть сообщение
А тот, которого нашел у себя в городе - тормозит
Возможно ему была предложена скромная сумма и он занимается программой когда других дел нет.
Но без детального описания сложно оценить реальную стоимость разработки этого приложения.

0
0 / 0 / 0
Регистрация: 24.02.2015
Сообщений: 12
25.02.2015, 16:45  [ТС] 8
locm, Согласен... немного отклонились от темы.

Мне все таки не дает покоя тот факт, что отец эти файлы скомпилировал. Возможно я просто в самом процессе что-то делаю не так. Задаю какие-то не такие параметры. Возможно кто-то попробует скомпилировать то, что есть. На всякий случай в архив положил QBX.EXE, QBX.INI и QBX.KEY. Может в них собака зарыта?
Вложения
Тип файла: 7z qbx.7z (199.1 Кб, 5 просмотров)
0
6807 / 2837 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
25.02.2015, 17:36 9
Лучший ответ Сообщение было отмечено iVladimir как решение

Решение

Цитата Сообщение от iVladimir Посмотреть сообщение
озможно кто-то попробует скомпилировать то, что есть.
Скомпилировать то не сложно, только работать это не будет, там видно модули связаны между собой + дополнительные папки, файлы. Нужен весь проект, целиком со всеми "потрохами"
Ну если нужен EXE именно этого MUSICDAY.BAS куска кода, то пожалуйте вот:
Вложения
Тип файла: zip MUSICDAY.ZIP (36.4 Кб, 5 просмотров)
1
0 / 0 / 0
Регистрация: 24.02.2015
Сообщений: 12
25.02.2015, 18:33  [ТС] 10
Pro_grammer, Добрый человек. Кланяюсь тебе в ноги и бью челом. Работает скомпилированный тобой ЕХЕ-шник. Вот только я балда несусветная. Выложил сюда файл со старым названием ini-файла в коде.

Вот тут новый, правленый. Не откажи горемыке. Скомпилируй пожалуйста еще раз.
Вложения
Тип файла: 7z MUSICDAYS.7z (1.8 Кб, 4 просмотров)
0
6807 / 2837 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
25.02.2015, 20:06 11
Цитата Сообщение от iVladimir Посмотреть сообщение
Скомпилируй пожалуйста еще раз.
Да пожалуйста, хоть два раза. Там имя в DOS 8.3 должно быть, у вас больше, потому скомпилировалось с коротким именем MUSICD~1.EXE
В новом файле реально изменено только имя файла \musicday1.ini, а смысл было компилировать? Можно было просто скопировать целиком вашу драгоценную программу на другой диск ( или в другую папку), изменить содержание musicday.ini на то, что вам надо, и был бы тот же эффект!
Вложения
Тип файла: zip MUSICD~1.ZIP (36.4 Кб, 3 просмотров)
1
6807 / 2837 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
25.02.2015, 20:22 12
Ещё один путь развития, без изменения готовых модулей.
Пишем программу, которая формирует musicday.ini по расписанию, хоть 5 раз в сутки новый файл. Эта же программа в нужный момент стирает старый файл musicday.ini, записывает туда новый, запускает по расписанию формирование блока плейлистов.
Мы имеем так называемый лаунчер, который будет автоматизировать весь процесс. Это намного проще, чем писать программу с нуля на на 25 страниц описания. И стоить будет сущие копейки ( по сравнению), работа не сложная.
0
0 / 0 / 0
Регистрация: 24.02.2015
Сообщений: 12
25.02.2015, 21:16  [ТС] 13
Во первых спасибо большое. Завтра протестирую - отпишусь.

Далее...
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Можно было просто скопировать целиком вашу драгоценную программу на другой диск
Не получится. Сам модуль запускается не расписанием. Его запуск прописан в родительском модуле с указанием путей расположения. Так же как и с десяток схожих модулей. Каждый отвечает за определенную рубрику.

Цитата Сообщение от Pro_grammer Посмотреть сообщение
Пишем программу, которая формирует musicday.ini по расписанию, хоть 5 раз в сутки новый файл.
Это интересный вариант. О нем я не думал. Но в то же время опять таки все упирается в
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Пишем программу
Учитывая наличие исходника существующей программы мне кажется такой вариант несколько сложнее. Хотя, в случае невозможности правки существующей программы это был бы идеальный вариант. Я б за Вас в церкви помолился за такой совет .

Цитата Сообщение от Pro_grammer Посмотреть сообщение
Это намного проще, чем писать программу с нуля на на 25 страниц описания.
Тут несколько иная ситуация. Рубрик много, модулей много. У каждого своя логика. Если Вам интересно - вот файл ТЗ. Там подробно все описано. Проблема в том, что все работает в дос-режиме. И если я умею понять логику и оперативно внести нужные изменения в расписание через правку кучи ini-файлов, то простой журналист в жизни не сможет даже с руководством по телефону добавить что-либо при необходимости. Именно по-этому я составил задание на планировщик плейлистов. Если интересно - оно в файле. Можете просмотреть. Тогда поймете о чем я. Логика работы всего пакета радиостанции на данный момент такая как и в ТЗ. Только в ТЗ я внес некоторые мелкие улучшения, существенно увеличил гибкость настроек и добавил графический интерфейс для удобства работы простым журналистам. Сама идея программы - автоматизация эфира на 95% с кучей защит от ошибок (как человеческих так и технических).
Вложения
Тип файла: 7z Планировщик полное описание.7z (6.22 Мб, 4 просмотров)
0
6807 / 2837 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
25.02.2015, 21:48 14
Цитата Сообщение от iVladimir Посмотреть сообщение
мне кажется такой вариант несколько сложнее.
Кому как. Иногда проще с нуля программу написать, чем разбираться в чужом коде, который не очень то комментирован, и к тому же написан на устаревшем языке программирования.
А на какой ОС крутится программа, какова мощность компьютера?
0
0 / 0 / 0
Регистрация: 24.02.2015
Сообщений: 12
25.02.2015, 22:17  [ТС] 15
С мощностью проблем нет. Ось стоит ХР сп3 х86. Программа написана в жесткой привязке к планировщику плеера Wolosoft Raduga. Проблема в том, что у версии, которая корректно работает с семеркой замечены проблемы с кодировками кириллицы. Именно по-этому остаюсь привязан к ХП.

Цитата Сообщение от Pro_grammer Посмотреть сообщение
Иногда проще с нуля программу написать
Абсолютно согласен и придерживаюсь того же мнения. Именно по-этому я и не искал возможности обновления модулей, а составил описание ТЗ на планировщик с такой гибкостью настроек, что его можно будет привязать к любому плееру. Хотя и планирую в дальнейшем расширить встроенным плеером сам планировщик.
0
6807 / 2837 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
26.02.2015, 06:55 16
Цитата Сообщение от iVladimir Посмотреть сообщение
1. Изменение параметров кода для получения возможности чтения из ini-файла нескольких значений времени.
Нужен образец реального ini файла, что бы знать, о чем идет речь?
Как создается этот musicday.ini?
В коде есть запрет на запуск до 3-х часов ночи, там какая то автоматизация?

Я тут внёс некоторое изменение в код. Теперь нет необходимости держать 2 клона, в начале запуска идет запрос, какой musicday.ini мы должны использовать, допустимые имена:
musicday.ini
musicday1.ini
musicday2.ini
и т.п. числом не ограничено.
На запрос надо ввести соответствующую цифру и нажать "Enter", если цифры нет, то просто нажать "Enter".
Естественно файлы musicday?,ini должны быть подготовлены и лежать там, где им положено.

Изменения в исходном коде коде, добавлено 6 строка:
QBasic/QuickBASIC
1
INPUT "Enter number musicday.ini? ", num$
И соответственно в девятой изменение
QBasic/QuickBASIC
1
OPEN Air$ + "ini\musicday" + num$ + ".ini" FOR INPUT AS #1
Скомпилированный модуль:
Вложения
Тип файла: zip MUSICDN.ZIP (36.9 Кб, 3 просмотров)
0
0 / 0 / 0
Регистрация: 24.02.2015
Сообщений: 12
26.02.2015, 12:19  [ТС] 17
musicday.ini содержит две строки
dir = \\main\E\Audio\musicday\
start = 1030

Тот файл, который был без изменений кода, отрабатывает на ура.
musicd~1 выдает ошибку 0DDD:00C9
musicdn если просто нажать Enter - тоже отрабатывает. Если нажать 1 - ошибка 0DDD:0103

Возможно проблема кроется именно именно в имени ini-файла. Скорее всего где-то в коде отец привязал его к имени папки или рубрики. Давайте попробуем поменять в коде не имя ini-файла, а путь к нему.
Например так:
QBasic/QuickBASIC
1
OPEN Air$ + "ini\1\musicday.ini" FOR INPUT AS #1
Добавлено через 14 минут
А вообще самый прекрасный вариант был бы, если бы модуль работал только с одним ini. Есть
dir = \\main\E\Audio\musicday\
start = 1030
делает один блок

Есть
dir = \\main\E\Audio\musicday\
start = 1030
start = 1630
делает два блока и т.д.
0
6807 / 2837 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
26.02.2015, 13:45 18
Цитата Сообщение от iVladimir Посмотреть сообщение
Например так:
Код QBasic/QuickBASIC
OPEN Air$ + "ini\1\musicday.ini" FOR INPUT AS #1
Пробуйте, сделал именно так.
Вложения
Тип файла: zip MUSICDAY.ZIP (36.4 Кб, 3 просмотров)
0
0 / 0 / 0
Регистрация: 24.02.2015
Сообщений: 12
27.02.2015, 11:54  [ТС] 19
блин... вот же намудрил отец. По отдельности оба файла отрабатывают. Каждый берет данные из своего musicday.ini. Но если они работают вместе, то срабатывает только тот, который в очереди запуска стоит первым.

Я сейчас полазил по коду... Проблему нашел. Правда пока не придумал, как ее обойти. Отец зачем-то ввел в код защиту от повторного монтажа... При чем глупую на мой взгляд (хотя кто знает как он себе это видел). При монтаже блока информация об использованных файлах записывается в event.log. В коде этот лог встречается 3 раза в строках 31, 77 и 102. Этот файл каждый день очищается. При запуске модуля он сканирует лог на наличие в нем уже использованных сегодня файлов. Если находит - больше их не использует. Я проверил. Если удалить из лога в ручном режиме использованные файлы - при повторном монтаже он их смонтирует заново...
Смысл защиты я интуитивно улавливаю. Обычные плейлисты с музыкой, если по какой-то причине прошло время их выхода и подошел следующий, просто удаляются. Плейлисты рубрик остаются висеть в задании, пока не исполнятся и только потом удаляются. То есть допустим рубрика на 10-30 прошла и плейлисты удалились. Подходит время проверки новых заданий и программа монтирует новые плейлисты на 10-30. И они опять идут в эфир. То есть просто убрать функцию проверки event.log нельзя.

Пока что я вижу только один вариант обхода этой проблемы. Изменение кода для возможности считывать из ini 2 времени.

Есть еще вариант. Не менять основной код, а добавить в конце функцию копирования с переименовкой...

Добавлено через 7 минут
Вижу я себе это так. Создается musicday1.ini. В нем прописывается одна строка с нужным временем... Хотя тут тоже геморрой. Долго описывать... Надо обдумать.

Добавлено через 20 минут
Проблема с простой переименовкой состоит в том, что время, указанное в ini-файле используется только для именовки первого плейлиста в рубрике. Остальные высчитывает в зависимости от продолжительности предыдущего файла.
Пример:
Лежит в папке на сегодня 3 файла
1.mp3 17:00
2.mp3 16:00
3.mp3 08:00
При указанном в ini-файле времени старта 10:30 она смонтирует 3 плейлиста:
1030 1.m3u
1047 2.m3u
1103 3.m3u

Если в musicday1.ini будет прописано 1600, то оно должно грамотно переименовать
1600 1.m3u
1617 2.m3u
1633 3.m3u

Вторая проблема в определении файлов, которым необходима переименовка. В папке, куда закидываются готовые файлы рубрики, кроме них лежит около 200 других сформированных плейлистов на день (другие рубрики, музыка и т.д.). Как назначить, какие именно файлы нуждаются в копировании и переименовке?

Добавлено через 1 час 19 минут
Pro_grammer, У меня пока нет возможности отправлять ЛС. Видимо завтра появится. Так что пишу пока здесь. На счет вашего предложения - не получится. Очень уж одно на другое завязано. У меня есть другая идея. Все вот эти тесты я отрабатываю на машине-клоне. Я могу вам предоставить к ней доступ через TeamViewer. Вот тогда вы действительно сможете увидеть всю эту картину целиком.

Добавлено через 17 часов 30 минут
По большому счету тему можно закрывать. Изначально поставленная задача решена. Побочная проблема к теме не относится. Всем спасибо за участие.
0
27.02.2015, 11:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2015, 11:54
Помогаю со студенческими работами здесь

Ошибка при компиляции файла
Собираюсь делать клиент для галактики знакомств(Чат). Сам код: unit Unit1; interface uses ...

Ошибка при компиляции файла
Пытаюсь подключить graphics, но без успешно! Код, вроде, без ошибок, поэтому не знаю в чем...

Ошибка при компиляции exe файла
Пытаюсь скомпилировать пример из книги Assembly Language for x86 processor .386 .model flat,...

Ошибка компиляции ввода-вывод файла
#include &lt;iostream&gt; int main() { char Stext=&quot;Hello world&quot;; char buf=&quot;Goward&quot;; FILE...


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

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