Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2009, 10:36   #1
Ralf_ru
Пользователь
 
Регистрация: 19.03.2009
Сообщений: 26
Вопрос Помогите упростить код

a[i],b[i],c[l],d[l] : переменные
y[i] : символы найденного имени без пробелов
z[l] : символы введенного имени без пробелов
n,m,k: счетчики

Код:
n:=0;
b[0]:=ExtractFileName(CDir);

  For i:=1 to Length(b[0]) do  // находим y[i]
   Begin
   b[i]:=inttostr(Length(b[0])-i);
   a[i]:=b[i-1]-b[i]
    if a[i]<>'пробел' then
        Begin
       y[i]:=a[i];
       n:=n+1                 // длина массива имени y[i] - найденного имени
        end
   end;

m:=0;
c[0]:='Введенное имя'
  For l:=1 to Length(n) do   // находим z[l]
   Begin
   c[l]:=inttostr(Length(c[0])-l);
   d[l]:=c[l-1]-c[i]
     if d[l]<>'пробел' then
         Begin
        z[l]:=d[l];
        m:=m+1               // длина массива имени z[l] - введенного имени 
         end
   end;

k:=0;
  For j:=1 to n do
   Begin
    if z[j]=y[j] then
                  begin
                    if z[j+1]=y[j+1] then k:=k+1
                  end
                 else k:=0
   end;

  If (k-1)=Length(m) 
   then файл найден;
Как можно оптимизировать код?
Подскажите плиз код пробела.

Я этот код ещё не пробовал... может он вообще не рабочий?

Последний раз редактировалось Ralf_ru; 01.04.2009 в 11:15.
Ralf_ru вне форума Ответить с цитированием
Старый 01.04.2009, 10:48   #2
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Цитата:
Подскажите плиз код пробела.
так по моему так и пишется ' ' или код chr(32)
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 01.04.2009, 11:12   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ральф, ты можеш на словах обьяснить чего хочешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.04.2009, 11:45   #4
Ralf_ru
Пользователь
 
Регистрация: 19.03.2009
Сообщений: 26
По умолчанию

Отвечаю...
Я хочу сократить код, чтоб быстрее работал, и потреблял меньше переменных...

А вообще код сравнивает 2 имени на наличие схожести.
MatchesMask не хочет работать!

Последний раз редактировалось Stilet; 01.04.2009 в 12:19.
Ralf_ru вне форума Ответить с цитированием
Старый 01.04.2009, 12:19   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
MatchesMask не хочет работать!
Приведи промер файла с которым он не хочет работать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.04.2009, 12:41   #6
Ralf_ru
Пользователь
 
Регистрация: 19.03.2009
Сообщений: 26
По умолчанию

Все файлы - *.txt:
if FindFirst(filename, faAnyFile,SearchRec) = 0 then
repeat
if MatchesMask(searchRec.name,FileName ) then
begin
n := n + 1;
a[n]:=(SearchRec.Name);
end;
until FindNext(SearchRec) <> 0;

Убираю весь Repeat нафиг, оставляя один MatchesMask всеравно выдает ошибку (что с Repeat сто без):
proect.exe raised too many consecutive exceptions : 'access violation at 0x00000000: read of address 0x00000000'. process stoped.

Последний раз редактировалось Ralf_ru; 01.04.2009 в 13:18.
Ralf_ru вне форума Ответить с цитированием
Старый 01.04.2009, 16:52   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
всеравно выдает ошибку
А цикл тут нипричем. Я помоему тебе уже говорил что скорее всего ты не следиш за размерностью массива "а"
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.04.2009, 17:17   #8
Ralf_ru
Пользователь
 
Регистрация: 19.03.2009
Сообщений: 26
По умолчанию

массив "а" не причем я же говорю, MatchesMask оставил один без всего остального, ошибка опять вылазиет, на нем же... токое ощущение, что он циклется именно при чтении MatchesMask, думает секунды 3.

if FindFirst(filename, faAnyFile,SearchRec) = 0 then
//repeat
if MatchesMask(searchRec.name,FileName ) then
//begin
//n := n + 1;
//a[n]:=(SearchRec.Name);
//end;

until FindNext(SearchRec) <> 0;

типо этого

Последний раз редактировалось Ralf_ru; 01.04.2009 в 17:24.
Ralf_ru вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Упростить формулу Stif-rva Microsoft Office Excel 7 09.03.2009 11:03
Помогите упростить с помощью VBA Dubineanschi Microsoft Office Excel 3 22.10.2008 14:21
Упростить логическое выражение. Помогите с поступлением. DartMrakkk Помощь студентам 4 27.07.2008 12:35