Необходимо направление (желательно правильное)

Предыдущая тема Следующая тема Перейти вниз

Необходимо направление (желательно правильное)

Сообщение  Ron в Ср Янв 07, 2009 2:51 pm

Значится так.. Я уже упоминал в прошлых сообщениях, что являюсь суперновичком, так что сразу прошу быть терпеливей немножко. Решил программу написать а не знаю с чего даже начать. Помогите остов так сказть создать. Куда рыть мне.

Программа моя должна из некого текстого документа (на который ей надо будет указать путь и который обновляется через некоторое время но по разному всегда - скажем минута другая) добывать данные текстовые и числовые(найти их там и обсчитать потом по формулам разным). Причем надо делать это как только файл обновился в тот же момент ( то есть она должна следить за ним) или же имеет смысл скажем каждую секунду его опрашивать (но эт наверно тормозить будет прога - нежелательно) Отсюда вопросов парочка:

1 как с файла импортировать данные или в файле провести поиск нужного?
2 как сделать так что бы новый импорт был после обновления файла?
3 вкратце пару команд чем вообще можно искать там.

Заранее брагодарен всем кто проявит участие... Это мой типа первый проект будет.

Ron

Сообщения : 11
Дата регистрации : 2009-01-05

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Необходимо направление (желательно правильное)

Сообщение  Eric-S в Ср Янв 07, 2009 2:58 pm

Ну тут первый вопрос. А что за файл?
Примерную структуру покажи?


И во-вторых. Как мгновенно, должна быть проверка?

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Необходимо направление (желательно правильное)

Сообщение  Eric-S в Ср Янв 07, 2009 3:13 pm

Про файлы почитай здесь:
http://freebasic.justforum.net/forum-f10/tema-t40.htm

Алгоритм примерно такой

Код:

do
if (файл был обновлён) then

(обработка файла)

end if
sleep 1000
loop while inkey <> chr(27)

Что файл был обновлён, можно узнать например получив дату его модификации. А потом сравнив её с предпоследней.
Я раньше не юзал, но вроде делает это функция FileDateTime ()
Примерно так

Код:

newdate = FileDateTime ("test.txt")
if newdate <> olddate then
print "file is modified!"
olddate = newdate
end if

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Необходимо направление (желательно правильное)

Сообщение  Gena в Ср Янв 07, 2009 4:05 pm

Задача вполне решабельна.Я могу помочь.
Только не знаю как устроить " как только файл обновился в тот же момент "
Я написал программу, которая ищет формулу перемещения во время ускорения.(она пока не окончена, но скелет есть)
Код:
Declare Function SearchForSth (stroka As string, obj As String) As String
Dim As Double vremya0
Dim As String knopka,stroka,file,Result
file = "test.txt"
vremya0=Timer
Print " -= Searching for the formula. =- "
Print "Expectation..."
Do
   knopka=InKey
   If Timer - vremya0>= 5 Then
      Print "Execution... ("+Time+")"
      Print "   {"
      vremya0=Timer
      Print "   Opening the """;file ;"""..."
      Open file for Input  As #1
      Print "   Treatment lines..."
      Do
         Line Input #1,stroka
         Result=SearchForSth(Stroka, "S = ")
         If Result<>"" Then Print Result: Exit Do 
      Loop While Not Eof(1)
      If result="" Then Print "   Formula not found"
      Close #1
      Print "   }"
      Print "Expectation..."
   EndIf
   Sleep 1
Loop While knopka<>Chr(27)
Function SearchForSth (stroka As string, obj As String) As String
Dim perechisl As Integer
For perechisl = 1 To Len(stroka)
   If Mid(stroka,perechisl,1) = Mid(obj,1,1) Then
      ' ......
      ' ......
   EndIf
Next   
Return ""
End Function
- завтра закончу.

Gena

Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 23
Откуда : Москва

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Необходимо направление (желательно правильное)

Сообщение  Ron в Ср Янв 07, 2009 9:46 pm


Все что было написано в этом сообщении до этого редактирования было полной утопией на поверку. Поэтому удалил что бы не не парить умных людей всякой ботвой. Спасибо за внимание.


Последний раз редактировалось: Ron (Чт Янв 08, 2009 9:57 pm), всего редактировалось 3 раз(а)

Ron

Сообщения : 11
Дата регистрации : 2009-01-05

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Необходимо направление (желательно правильное)

Сообщение  Eric-S в Ср Янв 07, 2009 10:17 pm

У-у-у! Это да. Всё это конечно можно сделать. Немного муторно.

Но как подсказывает мой опыт, обычно решение не бывает таким неуклюжим.
Вероятно можно ещё где-то в другом месте подцепиться или сделать всё совсем по другому.


И так, о разборе.

Можно конечно переместиться на нужное место файла используя функцию seek.

Но я думаю будет надёжнее пересканировать построчно этот файл.

Код:

' открываем для чтения текстовый файл
open "file.log" for input as #1
do while eof(1)

' считываем строку
line input #1, getline
' а потом её анализируем


loop
close #1


Теперь об анализе строки.

можно ведь из строки взять подстроку.

Код:

getline = "Game #9871716817: Table 1 - 15:43:38 ET - 2009/01/05"

' смотрим что наша строка начинается с "Game"
if left( getline, 5) = "Game " then
print "начинаеться с Game"
else
print "другая строка"
end if

И в таком роде. Почитай про строки, эта глава тоже написана.


Перевести число которое в строке, в числовую переменную, поможет val()

Код:

getline = "Game #9871716817: Table 1 - 15:43:38 ET - 2009/01/05"
print val( mid( getline, 7, 10))

но так на прямую строку разбирай, когда знаешь где в ней что. А если не уверен, то лучше проанализируй. Поищи начало и конец.
Например перед числом " #", а после него ": "

Код:

print InStr(1, getline, " #")
print InStr(1, getline, ": ")

Есть и другие методы анализа строк. Не буду в них углубляться, тема сложная. Для каждого типа строки нужно искать свой алгоритм.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Необходимо направление (желательно правильное)

Сообщение  Gena в Ср Янв 07, 2009 10:37 pm

Сложно это всё очень, точнее сложно всё это разобрать.
Немного муторно считаю для "первого проекта"?
Самый оптимальный первый проект (имхо)
а) если игра текстовая, то наподобии "Кто хочет стать пенсионером"
б) если игра графическая, то РГБ какая-нить с видом сверху (вот в этом могу подсобить, ещё как)
А насчёт строк - я посоветую почитать наш форум (если всё ещё надо).

Gena

Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 23
Откуда : Москва

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Необходимо направление (желательно правильное)

Сообщение  Ron в Ср Янв 07, 2009 11:54 pm

Спасибо за помощь и наставлния. Буду разбираться пока по тихому. У меня один вопрос на сегодня остался.

Код:

' открываем для чтения текстовый файл
open "file.log" for input as #1
do while eof(1) !!!!тут надо добавить =0 ? вроде в теме про обработку файлов так!!!!!!
' считываем строку
line input #1, getline
' а потом её анализируем
loop
close #1
Эт код сканирует весь файл с начала до конца - я правильно понимаю.
А мне надо самое начальное что бы скан шел с конца файла до первого слова Game к началу, потому как во всем файле этих гейм будет может и штук 500, а мне нужен только последний блок который начинается с гейм. Это как сделать не пойму никак.

Ron

Сообщения : 11
Дата регистрации : 2009-01-05

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Необходимо направление (желательно правильное)

Сообщение  Eric-S в Чт Янв 08, 2009 12:39 am

Ron пишет:
' открываем для чтения текстовый файл
open "file.log" for input as #1
do while eof(1) !!!!тут надо добавить =0 ? вроде в теме про обработку файлов так!!!!!!
Ну можно ноль или можно
do while not eof(1)

Ron пишет:
' считываем строку
line input #1, getline
' а потом её анализируем
loop
close #1
Эт код сканирует весь файл с начала до конца - я правильно понимаю.
Угу. Вот именно. Построчно, от первой строки к последней.


Ron пишет:
А мне надо самое начальное что бы скан шел с конца файла до первого слова Game к началу, потому как во всем файле этих гейм будет может и штук 500, а мне нужен только последний блок который начинается с гейм. Это как сделать не пойму никак.

Легче всего тупо просматривать файл от самого начала, анализируя каждый блок. В смысле скидывая нужные данные в соответствующие переменные.
В итоге, когда файл закончиться и петля разорвёться, то в твоих переменных окажуться данные из самого последнего блока.

После чего ты их обсчитывай.

Есть ещё вариант. Но он уже сложнее.
Запоминаешь размер файла.
А когда новый файл, он естественно будет больше.
Ты можешь в бинарном режиме взять только нужный кусок и распарсить его.

Но тут советую просто поиграться с бинарным режимом. Да и с разбором. На более простых примерах. Иначе кроме большого разочарования и мысли что ты наверное самый тупой, не получишь.
Хотя там ведь всё элементарно. Просто нужно привыкнуть. А может это мне так кажеться.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Необходимо направление (желательно правильное)

Сообщение  Ron в Чт Янв 08, 2009 9:42 pm

В общем разобрался немного. Что то получается, но дело оказалось трудней для меня чем выглядело на первый взгляд.
Раз проще будет с самого начала все сканить то пусть так и будет, но для работы мне обязательно нужен только последний блок.
Поэтому пусть так будет у меня. Я с начала сканю файл нахожу game много раз каждый раз сравниваю номер игры, больший номер и будет началом последнего блока. определяю номер строки и с этого места начинаю работать до конца файла.
Отсюда:
1 надо как то выяснить номер строки ( в учебнике про строки нет )
2 из учебника "При вызове функции Line Input #, информация будет считыватся построчно начиная спревой строки (если только не используются функции смены позиции начала считывания)."
какая функция используется для смены позиции начала считывания?

Ron

Сообщения : 11
Дата регистрации : 2009-01-05

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Необходимо направление (желательно правильное)

Сообщение  Eric-S в Чт Янв 08, 2009 10:57 pm

Для смены позиции функция seek.

Номер строки... Ха, а посчитать трудно? Раз, два, три, четыре, пять...
Код:

do
numberline += 1
print "читаем строку номер: "; numberline
line input #1, getline
loop

А зачем считать строки?
Опять же, сохрани номер последнего блока.
А следующий, будет новым, который как раз и нужен.
Вот и всё!

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Необходимо направление (желательно правильное)

Сообщение  Ron в Чт Янв 15, 2009 4:57 pm

Продолжаю буйствовать так сказать. Благодаря помощи товарищей форумян разобрался с текстовым файлом. После мытарств выцепил с него все что хотел. Тем самым сделал шаг вперед к программируемому будущему. Дальше буду разбираться с получеными значениями.
И тут сразу же тупик почти. Ситуация такая.
у меня есть 9 переменных со значениями S1....S9. значения разные везде но скажем две переменные - 3я и 9я равны нулю.
Также я имею некое число N, например равное 5 в данном случае.
Мне надо собрать новый список Переменных P1...P9 со старого списка, начиная c SN, то есть S5 тут. Но нулевые должны значения SN не должны попасть в этот список.
Таким образом должно получиться здесь S5=P1 S6=P2 S7=P3 S8=P4 S9(ноль поэтому выпадает) дальше к началу S1=P5 S2=P6 S3(ноль, выпадает) S4=P7. Получиться должно тут 7 штук P.
После нескольких часов раздумий не смог ничего придумать кроме тупого перечисления еслитогдаиначе, но чую что такая громоздская конструкция не совсем верный путь будущего программиста, т.к. должно быть более изящное решение. Будте добры подтолкните.

Ron

Сообщения : 11
Дата регистрации : 2009-01-05

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Необходимо направление (желательно правильное)

Сообщение  Eric-S в Чт Янв 15, 2009 6:34 pm

Есть такая чудесная вещь как массив.

Код:

' Вот создаём массив s
redim s(1 to 9) as integer

' точно также массив p
redim p(1 to 9) as integer

' тут вы заполняете массив s своими значениями
' и вообще ваш код, который пишите сами

' теперь в цикле сканируем массив
dim i as integer ' переменная для массива (номер обрабатываемого элемента)
dim n as integer ' номер элемента с которого надо начинать
for i = n to 9

' если я правильно понял, то переписывать нужно значения отличные от нуля
' проверяем значение элемента s с номером i
if s(i) <> 0 then
' и если не 0, то копируем в p с такимже номером
p(i) = s(i)
end if


next

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Необходимо направление (желательно правильное)

Сообщение  Ron в Пн Янв 19, 2009 4:00 am

в очередной раз спасибо. проблемы потихоньку разрешаются.
- к вопросу о чудесной вещи массивах. простой вопрос наверно. как организовать квадратный массив?, скажем 10х10. (в учебнике про массивы совсем ничего нету)
- возвращаюсь к началу темы. об открытии текстового файла. можно ли организовать кнопочку "open" что бы нажать на нее и выбрать как в виндоус нужный файл?
- или еще трудней - кнопкой выбрать нужную папку где программа сама найдет нужный файл по дате и имени? (эт для меня вообще космос)

Ron

Сообщения : 11
Дата регистрации : 2009-01-05

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Необходимо направление (желательно правильное)

Сообщение  Eric-S в Пн Янв 19, 2009 7:35 am

Да. К сожалению, до того, чтобы написать главу про массивы у нас просто не дошли руки. Все занятые. Хотя собирались-собирались. А собрались официальный мануал переводить. Но тоже переводим еле-еле.

И так. Если коротко. То у массивов может быть несколько измерений. Тут уже не помню, больше 2 не пользую. Хотя их можно толи 10. А может ещё больше создать.

Просто при создании массива, через запятую перечисляем.

redim matrica(0 to 9, 1 to 2) as integer

И теперь есть два измерения.
В вашем случае
redim array(1 to 10, 1 to 10) as integer
И получаете ровно 100 ячеек. 10*10. От array(1,1) до array(10,10).

Окно с выбором файла сделать можно.
Смотрите
"C:\Program Files\FreeBASIC\examples\Windows\gui\fileopen.bas"
а дальше вопросы уже не ко мне. Так как я с этим не баловался.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

массивы

Сообщение  Freebasic_ru_admin в Пн Янв 19, 2009 6:51 pm

Ребята, я конечно сильно не читал чем вы в этой теме занимаетесь, но услышал слово массивы и вспомнил, что посвятил этому обширную тему у себя на сайте. Я работал вот в таких направлениях:

-Сортировка массива в порядке возростания эллементов;
-Сортировка массива в порядке уменьшения эллементов;
-Подсчет повторений эллементов в массиве;
-Удаление одинаковых эллементов массива. Сжатие массива.;
-Сортировка по алфавиту эллементов массива;

Всё это на странице: http://freebasic.ru/029.php
Все примеры работают отлично и проверены. Wink

Freebasic_ru_admin

Сообщения : 17
Дата регистрации : 2008-12-15
Откуда : Украина, Донбасс

Посмотреть профиль http://freebasic.ru

Вернуться к началу Перейти вниз

Re: Необходимо направление (желательно правильное)

Сообщение  Eric-S в Ср Янв 21, 2009 8:47 am

Спасибо. Простенько. Но всё же тоже есть интересное. Хотя про многомерные масивы, кажеться, не упоминаеться.
Да и сортировка... В прочем для этого нужно конечно же читать что-нибудь серьёзное из классиков , например
Дональд Кнут - "Искусство программирования, том 3. Сортировка и поиск"

Что-то есть в книгах:
"Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн" - "Алгоритмы: построение и анализ"
Роберт Седжвик - "Фундаментальные алгоритмы на C. Анализ/Структуры данных/Сортировка/Поиск"

Или хотябы
Томас Ниман- "Сортировка и поиск: Рецептурный справочник".

Впрочем я уверен, что человек может сам придумать, то что ему нужно. Когда-то я был младше, а инета у меня небыло. За 20 минут написал програмку для сортировки строк. Как я узнал гораздо позже этот метод назывался "пузырьковым". Ну и нафиг мне эти книжки? Разве что для всяких заумностей. А можно заюзать просто чужые библиотеки, где всё уже отлажено.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Необходимо направление (желательно правильное)

Сообщение  tux в Ср Янв 21, 2009 4:08 pm

ну если кому интересно про сортировки могу дать полистать методичку свою по САОД-у (чевотатам обработки данных), тама по идее должны были нам весь семестр про разные сортировки рассказывать, а мне их еще сдавать... но там все их понять мона за пол дня, некоторые, типа высокопроизводительные...
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: Необходимо направление (желательно правильное)

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения