Форум
Написать нам
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: as-master  
Сокращение строк
Sam726Дата: Воскресенье, 25 Апреля 2010, 19:52 | Сообщение # 1
Поднаторевший
Группа: Проверенные
Сообщений: 141
Репутация: 0
Награды: 0
Статус: Offline
Всем привет! Мне нужна помощ. Нужно сократить множество строк к одному целому.
У меня к примеру есть скрипт в котором находится 10 строк:
Code
file$='<SrcDir>\Data\Holidays.dat'  
a1$=StrFromFile(file$,1,1)  
SongListAdd("a1$")  
a2$=StrFromFile(file$,2,1)  
SongListAdd("a2$")  
a3$=StrFromFile(file$,3,1)  
SongListAdd("a3$")
...
a10$=StrFromFile(file$,10,1)  
SongListAdd("a10$")

И в других похожих случаях
Code
file$='<SrcDir>\Data\Number.dat'
a1$=StrFromFile(file$,1,1)
LoadText("Text8","a1$")
a2$=StrFromFile(file$,2,1)
LoadText("Text9","a2$")
a 3$=StrFromFile(file$,3,1)
LoadText("Text10","a3$")
...
a10$=StrFromFile(file$,10,1)
LoadText("Text10","a10$")

Так вот. Таких скриптов допустип тоже 10. Получается что всего 100 строковых кодов. Но загвоздка еще в том что в каждом скрипте идет продолжение предыдущего скрипта.
Code

1 Скрипт - 1,2,3...10.
2 Скрипт - 11,12,13...20.
....
10 Скрипт - 90,91,92...100

Возможно есть какойто способ что бы не писать в каждом скрипте кучу одного и того же только с разными цифрами, возможно это все можно сократить. Может через масивы или что... У меня что-то ничего покаместь не получается. Приходится писать большие скрипты и внимательно менять цифры что бы не сбится... грустно :'(


 
Alex3AДата: Воскресенье, 25 Апреля 2010, 20:02 | Сообщение # 2
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
Quote (Sam726)
Возможно есть какойто способ что бы не писать в каждом скрипте кучу одного и того же только с разными цифрами, возможно это все можно сократить.

Это просто недостаток твоего алгоритма, пошевели своим мозгом, и у тебя все выйдет :D
Узучи что такое циклы скриптаймеры и массивы, и будет тебе благо.
 
toizyДата: Воскресенье, 25 Апреля 2010, 20:07 | Сообщение # 3
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Основа алгоритма:

Code
For i = 1 To 10
a$[i]=StrFromFile(file$,i,1)    
SongListAdd("a$[i]")    
Next i


Жизнь оказалась не такой уж и забавной, как поначалу...
 
YURIYДата: Воскресенье, 25 Апреля 2010, 20:08 | Сообщение # 4
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
%)

По порядку.

Quote (Sam726)
У меня к примеру есть скрипт в котором находится 10 строк:

Чтобы загрузить из файла всё в SongList, делаешь вот так:

Code
SongListLoad("<SrcDir>\Data\Holidays.dat","TXT")

Читаем нелюбимую справку для подробностей.

Quote (Sam726)
И в других похожих случаях

Ни фига себе "похожий случай" :) Каждую строку грузить в отдельный текстовый объект? Тогда тупо цикл. Код сильно укоротится, для того они и придуманы.

Уточняй задачу. Что-то тут не так...



Вечная память Андрею Сергееву!
 
Alex3AДата: Воскресенье, 25 Апреля 2010, 20:23 | Сообщение # 5
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
YURIY, Цикл он и в африке цикл, не в зависимости от его реализации, толи по
фор некст, то ли на таймерах, мож конечно и рекурсивно.
Sam726, можеш считать нормальным, если все у тебя будет описанно по одному
разу.
Quote (YURIY)
брр, Дима... Сотри

Дык энто то и есть основа алгоритма, не путай с реализацией, если по человечески, то повторить н раз одно и то же, а уж реализовать мона и циклом и таймером и рекурсией.
Так что Sam726, не понимай превратно :D
В одном ты прав, что то Sam726, не додумал, вот и получаются монстоузы.
 
YURIYДата: Воскресенье, 25 Апреля 2010, 20:27 | Сообщение # 6
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (Alex3A)
YURIY, Цикл он и в африке цикл, не в зависимости от его реализации, толи по фор некст, то ли на таймерах, мож конечно и рекурсивно.

Это ты мне хочешь объяснить? :) Нет, мне не нужно. Автору топика.



Вечная память Андрею Сергееву!
 
Alex3AДата: Воскресенье, 25 Апреля 2010, 20:33 | Сообщение # 7
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
YURIY, а его сначала надо тупо по циклам погонять, для восприятия понятий,
а уж потом всякия хитрости, всеж цикл есть основа.
Че надо человеку для полного счастья :D Разобратся с циклами и условными переходами.
 
YURIYДата: Воскресенье, 25 Апреля 2010, 20:35 | Сообщение # 8
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Согласен :)

Начинать нужно с основ программирования, а потом уже что-то делать. Но многие любят поступать наоборот.



Вечная память Андрею Сергееву!
 
Sam726Дата: Воскресенье, 25 Апреля 2010, 21:06 | Сообщение # 9
Поднаторевший
Группа: Проверенные
Сообщений: 141
Репутация: 0
Награды: 0
Статус: Offline
Я так понимаю что все сводится к начулу. К тому что я и думал, нужны всякие цыклы, масивы, повторы короче. Это кок раз то что я толком так и не понял всего и полностью. :D

toizy, Суть я примерно понял. Ну а продолжение то будет фурычить или нет? Мне же нужно все по очередно что бы ишло.

Code
For i = 1 To 10    
a$[i]=StrFromFile(file$,i,1)       
SongListAdd("a$[i]")       
Next i

Потом в другом скрипте
Code
For i = 11 To 20    
a$[i]=StrFromFile(file$,i,1)       
SongListAdd("a$[i]")       
Next i

В этом то и получилась у меня зацепка. Да и я еще думал может что-то другое есть...
YURIY,
Quote
Чтобы загрузить из файла всё в SongList, делаешь вот так:
Это я уже давно знаю (основу я нор знадю), но мне нужно загрузить некоторые строки из файла, а не все и сразу.
Quote
Ни фига себе "похожий случай"
А что там нет похожего? Суть таже. В первом мы строки грузим в список, а во втором тексты.




Сообщение отредактировал Sam726 - Воскресенье, 25 Апреля 2010, 21:07
 
Alex3AДата: Воскресенье, 25 Апреля 2010, 21:15 | Сообщение # 10
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
Sam726, посмотри - видиш у тебя два почти одинаковых блока кодов-значит что еше не все додумал, можно обойтись и одним.
Quote (Sam726)
но мне нужно загрузить некоторые строки из файла, а не все и сразу.

Вот для этого и нужны условные операторы.
А как разберешся со своей требухой, то можно будет так вовсе и не делать, но это полезно для понимания. Когда чего то много, то можно и базу данных юзать.
 
YURIYДата: Воскресенье, 25 Апреля 2010, 22:13 | Сообщение # 11
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (Sam726)
В первом мы строки грузим в список

То есть, тебе нужны строки группами по 10 штук, к примеру? Тогда так:

Code
path$='C:\1.txt'
del$=CHR(13)+CHR(10)
s$=StrFromFile(path$,1,10)+del$
For i=1 To GetArrayNum(s$,del$)
   item$=GetArrayItem(s$,del$,i)
   SongListAdd("item$")
Next i

Считаю такой вариант хорошим потому, что к файлу обращаемся 1 раз, а не 10, как у Димы. К тому же зачем он всё записывает параллельно в массив - я не соображу.

Quote (Sam726)
а во втором тексты

Тоже самое:

Code
path$='C:\1.txt'
del$=CHR(13)+CHR(10)
s$=StrFromFile(path$,1,10)+del$
For i=1 To GetArrayNum(s$,del$)
   item$=GetArrayItem(s$,del$,i)
   object$='Text'+CHAR(i)
   LoadText("object$","item$")
Next i

Добавлено (25 Апрель 2010, 22:13)
---------------------------------------------
Из этих вариантов легко сможешь сделать всё универсально под свою задачу. Просто если бы я от и до знал её... Впрочем, этого для подсказки хватит.

Дальше додумай сам.



Вечная память Андрею Сергееву!
 
Alex3AДата: Воскресенье, 25 Апреля 2010, 22:39 | Сообщение # 12
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
А что мешает загрузить сразу все и обработку сделать в одном цикле?
 
YURIYДата: Воскресенье, 25 Апреля 2010, 22:51 | Сообщение # 13
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (Alex3A)
А что мешает загрузить сразу все и обработку сделать в одном цикле?

Для меня написать универсальный алгоритм - совершенно не проблема. Да и если рассматривать мой сценарий, там поменяются только параметры в StrFromFile. А циклы будут составляться исходя из задачи.

Я просто не хочу запутать автора - это раз. А два - точно не ясно, что он хочет и зачем всё это. Я не удивлюсь, если всё можно сделать вообще иначе, то есть он пошёл не по тому пути.

Короче, ждём ответа. Да и в конце-концов, пусть тоже включает голову и думает хоть немного над задачей.



Вечная память Андрею Сергееву!
 
Alex3AДата: Воскресенье, 25 Апреля 2010, 23:03 | Сообщение # 14
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
Quote (YURIY)
А два - точно не ясно, что он хочет и зачем всё это.

Вот это, по моему, и есть основное.
 
Sam726Дата: Понедельник, 26 Апреля 2010, 16:04 | Сообщение # 15
Поднаторевший
Группа: Проверенные
Сообщений: 141
Репутация: 0
Награды: 0
Статус: Offline
Вижу у меня как-то туго получается обяснять что мне нужно. :) Вот маленький проэкт вылаживаю, там все есть, но в малых дозах, только на 3 ступени, а у меня их будет много.
Думаю там будет все понятно :)

Добавлено (26 Апрель 2010, 16:04)
---------------------------------------------
Впрочем цикл то есть...

Code
name$[1]='1'
name$[2]='2'
name$[3]='3'
name$[4]='4'
name$[5]='5'

For x=3 To 5
   FileExist("name$[x]","Check")
   Count=Count+Check
   MessageEx("Сообщение","name$[x]")
Next x

Оно нормально вроде... Но это не тот случай. Мне нужны просто цифры. Этого будет достаточно.
Прикрепления: media1.rar (1.2 Kb)


 
YURIYДата: Понедельник, 26 Апреля 2010, 19:52 | Сообщение # 16
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Вынос мозга, честно говоря.

Sam726, слабо доказать, что мой пример выше не подходит тебе?

Я не понимаю, зачем мусолить одно и то же миллион раз, когда решение давно дано? Неужели так сложно включить голову и правильно внедрить его в проект?



Вечная память Андрею Сергееву!
 
Sam726Дата: Понедельник, 26 Апреля 2010, 21:27 | Сообщение # 17
Поднаторевший
Группа: Проверенные
Сообщений: 141
Репутация: 0
Награды: 0
Статус: Offline
Да! Спасиб. Это просто пример добавил, может кто что-то еще предложит...
Твой код роботает... Но! Но есть загвоздка. При использовании CHR символов он оставляет пометки... ну и короче оно не то что нужно получается. Естественно это образец, его еще нужно доработать, но все же спасибо. Буде что-то химичить.




Сообщение отредактировал Sam726 - Понедельник, 26 Апреля 2010, 22:23
 
YURIYДата: Понедельник, 26 Апреля 2010, 23:13 | Сообщение # 18
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (Sam726)
При использовании CHR символов он оставляет пометки...

Ну так никто не мешает исправить это. А я, честно говоря, не заметил :(

Code
path$='C:\1.txt'
** Считываем строки с 1 по 10
s$=StrFromFile(path$,1,10)
** Заменяем переводы строк на |
del$=CHR(13)+CHR(10)
s$=StrChange(s$, del$, |)+'|'
** Выбираем все данные
For i=1 To GetArrayNum(s$,|)
   item$=GetArrayItem(s$,|,i)
Next i

Quote (Sam726)
ну и короче оно не то что нужно получается

Quote (Sam726)
Естественно это образец, его еще нужно доработать

Ну ясное дело, я же не экстрасенс делать, как тебе нужно :)

Давай, пробуй. Если что - спрашивай.



Вечная память Андрею Сергееву!
 
Sam726Дата: Вторник, 27 Апреля 2010, 00:53 | Сообщение # 19
Поднаторевший
Группа: Проверенные
Сообщений: 141
Репутация: 0
Награды: 0
Статус: Offline
Эээ... Что я не понял. Но этот твой новый код вообще не пашет. Предыдущий работает с помехами, а это что-то у меня не хочет. :(
Quote
Ну ясное дело, я же не экстрасенс делать, как тебе нужно

А я для чего образец выложил. Вы ж сами писали что не можете толком понять что нужно, я и выложил пример в котором можно эксперементировать.


 
YURIYДата: Вторник, 27 Апреля 2010, 00:58 | Сообщение # 20
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (Sam726)
Предыдущий работает с помехами, а это что-то у меня не хочет.

Не может быть. Что-то делаешь не так.

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

Quote (Sam726)
А я для чего образец выложил

Ну вообще-то я тот код написал раньше твоего примера.

А сейчас вижу, что пример всё равно актуален. За тебя ведь 2 цифры и 2 переменные я менять не буду...



Вечная память Андрею Сергееву!
 
Sam726Дата: Вторник, 27 Апреля 2010, 01:12 | Сообщение # 21
Поднаторевший
Группа: Проверенные
Сообщений: 141
Репутация: 0
Награды: 0
Статус: Offline
Я пойму, я научусь, я добюсь нужного результата. Там то ведь получается нужно все голиш менять обычные цифры. Нужно только понять как...

 
YURIYДата: Вторник, 27 Апреля 2010, 01:14 | Сообщение # 22
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (Sam726)
Я пойму, я научусь, я добюсь нужного результата.

Ну вот, уже хорошо. Вникай, пробуй, учись.



Вечная память Андрею Сергееву!
 
Sam726Дата: Вторник, 27 Апреля 2010, 01:31 | Сообщение # 23
Поднаторевший
Группа: Проверенные
Сообщений: 141
Репутация: 0
Награды: 0
Статус: Offline
АААААААААА!!!!!!!!!!!!!!! :D bravo dance jokingly
Получилось!!! yahoo
Вот то что мне нужно было:
Code
For i=1 To 3
   file$='<Embedded>\0.txt'
   a1$=StrFromFile(file$,i,1)
   SongListAdd("a1$")
Next i

Всего-то! Вот что справка с человеком делает, ну и желание то же нужно :D write


 
YURIYДата: Вторник, 27 Апреля 2010, 01:34 | Сообщение # 24
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Это, конечно, хорошо, но...

Три раза идёт присваивание переменной file$ одного и того же.
Три раза идёт чтение из файла.

Молодец, дошёл до этого. А теперь попробуй разобрать мой пример :)



Вечная память Андрею Сергееву!
 
Sam726Дата: Вторник, 27 Апреля 2010, 01:39 | Сообщение # 25
Поднаторевший
Группа: Проверенные
Сообщений: 141
Репутация: 0
Награды: 0
Статус: Offline
Да я на твои примеры и не смотрел особо. Первый выдает не совсем то что нужно. В списке получается баг:

И получается что файл не грузится. И к чему там CHR ??? Их там по суте вообще не долно быть. Они все малину портят :D
Прикрепления: 2766462.png (9.7 Kb)


 
YURIYДата: Вторник, 27 Апреля 2010, 01:46 | Сообщение # 26
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (Sam726)
В списке получается баг:

Воспроизведи-ка мне его с кодом последнего моего примера.

Quote (Sam726)
И к чему там CHR ???

К тому, что не нужно задавать странные вопросы, если не можешь разобраться.

Quote (Sam726)
Их там по суте вообще не долно быть

Ну да, расскажи это программисту по образованию и с опытом... Что там должно быть, а чего нет.

Злит уже, блин :( Надоело глупости слушать.

Пришёл за советом, получил его. Сделал всё равно по-своему, через попу. Рассказал мне кучу сказок и как ты хочешь, чтобы я тебе помогал потом?



Вечная память Андрею Сергееву!
 
Sam726Дата: Вторник, 27 Апреля 2010, 01:50 | Сообщение # 27
Поднаторевший
Группа: Проверенные
Сообщений: 141
Репутация: 0
Награды: 0
Статус: Offline
Нет. Все. Спасибо большое. С твоим кодом попробую разобратся. Но второй код реально не пашет. Первый я скопировал, вставил, запустил, получилось, но с дефектом. Второй код скопировал, вставил, и вообще ноль, ничего нет. :( Да же и не знаю почему оно так...

 
YURIYДата: Вторник, 27 Апреля 2010, 01:53 | Сообщение # 28
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (Sam726)
Второй код скопировал, вставил

Так называемый эффект "копи-паст". Нужно ведь не только это делать, но ещё почесать макушку и исправить под себя!

Я тебе ещё раз повторю. Добрый совет, между прочим. Почитай в справке про отладку проекта! Кучу времени сэкономишь и 500 раз спасибо потом скажешь.



Вечная память Андрею Сергееву!
 
Sam726Дата: Среда, 28 Апреля 2010, 14:19 | Сообщение # 29
Поднаторевший
Группа: Проверенные
Сообщений: 141
Репутация: 0
Награды: 0
Статус: Offline
В чем загвоздка? Все ж правельно.
Code
For i=1 To 42
    a1$='Text'+CHAR(i)
    file$='<SrcDir>\Data\Number.dat'
    a2$=StrFromFile(file$,i,1)
    LoadText("a1$","a2$")
Next i

И еще один
Code
For i=1 To 42
a2$='<list>'+CHAR(i)
LoadText("a1$","a2$")
a3$=StrFromFile(a1$,i,1)
a4$='Object'+CHAR(i)
SetObjectParam("a4$","a3$")
Next i

Главное при проверке нормально все, а на деле не хочет... :'(




Сообщение отредактировал Sam726 - Среда, 28 Апреля 2010, 14:20
 
YURIYДата: Среда, 28 Апреля 2010, 19:41 | Сообщение # 30
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (Sam726)
В чем загвоздка? Все ж правельно.

Совершенно верно. Всё правильно. Неправильно только запускать такой проект клавишей F5, раз указываешь относительный путь.

Quote (Sam726)
И еще один

Запусти отладчик, задолбал уже! И посмотри, что у тебя хранится в каждой переменной. Даже намекну - фигня.



Вечная память Андрею Сергееву!
 
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: