Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с Array of Char


alles ©   (2007-05-22 13:33:00) 

Здраствуйте.
У меня есть вопрос по производительности программы.
1. Есть один array of byte[1..2048] (из файла заполняю его). В нем хранится Char-ы(символы и буквы). Нужно найти только слова из него. Как быстрее это делать?
Делаю так:

Buf:array of byte[1..2048];

for i:=1 to 2048 do
if (Buf[i] in ['A'..'Z','a'..'z']) then
// буква
else //не буква

При больших размером файла очень много работает.
И 2 - й вопрос:
Что быстрее будет работать:
if Not(c in ['A'..'Z','a'..'z']) then или
o:=Ord(aBuf[i]);
if ((o>64) and (o<91)) or((o>96)) then

Спасибо


Anatoly Podgoretsky   (2007-05-22 19:47:00) [1]

> alles  (22.05.2007 14:04:11)  [11]

И ты уже сумел извлекать текст из Ворда и Экселя, а такая малость не получается.


Anatoly Podgoretsky   (2007-05-22 19:46:00) [2]

> Плохиш  (22.05.2007 17:34:17)  [17]

Не волнуйся, забаним за перевод.


Sinus   (2007-05-22 17:58:00) [3]


> могут быть и не текстовые (например *.DOC,*.XLS...)

определяй какой тип файла открываешь.. и не будет проблем
а на счет текста то проще определять во время чтения файла


Плохиш   (2007-05-22 17:34:00) [4]


> Jeer ©   (22.05.07 17:23) [16]
> Плохиш ©   (22.05.07 16:50) [15]
>
> Здесь много слов и некоторые из них нехорошие.
> Это я тебе как специалист по языку гуингмов говорю.

Блин, это ж меня теперь забанят 8-O
Надо же, на специалиста нарваться :-( думал здесь больше никто этот язык не знает...


Jeer   (2007-05-22 17:23:00) [5]

Плохиш ©   (22.05.07 16:50) [15]

Здесь много слов и некоторые из них нехорошие.
Это я тебе как специалист по языку гуингмов говорю.


Плохиш   (2007-05-22 16:50:00) [6]

йфгсдфг йдсгфйк сдлфртеуи йхгкыхгциу3249726359 иугдсфклгудфи йкхндфдл

Вопрос: сколько здесь слов и нужны ли они кому-нибуть? :-P


Jeer   (2007-05-22 15:53:00) [7]


> umbra ©   (22.05.07 15:35) [13]


Не ломай челу кайф - пусть сделает хотя бы что-то работающее, а там, глядишь, понимание придет или появятся следующие вопросы:)


umbra   (2007-05-22 15:35:00) [8]


> По скольку эти файлы могут быть и не текстовые (например
> *.DOC,*.XLS...)  то я открываю файл и читаю его блоками
> (2048 bytes) в array of char.

и чем это помогает? там нет текста в том виде, в каком он есть в текстовых файлах.

> Проблема как быстрее из масива прочитать только слова

задача не тривиальная :) Надо ж еще различить, где в документе именно текст, а не объекты, стили и т.д., узнать, где он начинается и где заканчивается и, наконец, преобразовать его к читаемому виду.


Johnmen   (2007-05-22 14:11:00) [9]


> Проблема как быстрее из масива прочитать только слова

Последовательным перебором байтов с анализом Jeer ©   (22.05.07 13:50) [9]


alles   (2007-05-22 14:04:00) [10]

Ребята, я обьясню ситуацию. Надо написАть программу которая должна создать базу данных из слов которые находятся в файлх которые юзер выбрал. По скольку эти файлы могут быть и не текстовые (например *.DOC,*.XLS...)  то я открываю файл и читаю его блоками (2048 bytes) в array of char. Проблема как быстрее из масива прочитать только слова


Dr.M@$   (2007-05-22 13:51:00) [11]

угу а потом результаты изложеш нам :)


Jeer   (2007-05-22 13:50:00) [12]


> Что быстрее будет работать:
> if Not(c in ['A'..'Z','a'..'z']) then или
> o:=Ord(aBuf[i]);
> if ((o>64) and (o<91)) or((o>96)) then


Так проверь.

2. Сделай массив констант arB[0..255] of boolean и заполни True/False в соответствии с  твоим пониманием символов
Далее

if arB[ord(Buf[i])] then

Проверка на скорость - домашнее задание.


Dr.M@$   (2007-05-22 13:48:00) [13]

например if 'A'=copy(string,1,n) then
а можно сразу вырожениями :)
if 'ABCD'=copy(string,4,n) then


Dr.M@$   (2007-05-22 13:46:00) [14]

если у тебя там какой то текст то загрузи его в string или memo а потом там по буквам читай


alles   (2007-05-22 13:44:00) [15]

так я нечитаю по одному байту, а блоками


alles   (2007-05-22 13:43:00) [16]

Читай файл по байтам
я и так читаю по байтам.
И причем тут размер файла, если ты анализируешь массив?
так я читаю по одному байту, а блоками


Dr.M@$   (2007-05-22 13:43:00) [17]

Согласен. Сделай норматьный файл


Правильный Вася   (2007-05-22 13:43:00) [18]

ты на русском напиши, а не на даунском


iXT   (2007-05-22 13:39:00) [19]

Что за бред?
Читай файл по байтам, и анализируй сразу

И причем тут размер файла, если ты анализируешь массив?


alles   (2007-05-22 13:35:00) [20]

сорри: array of char[1..2048]


Наверх

Титульная страница Поиск, карта сайта Написать письмо