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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2010, 19:04   #1
T-dayne
Пользователь
 
Аватар для T-dayne
 
Регистрация: 07.02.2010
Сообщений: 54
Восклицание Программа выдает ошибку при работе

программа должна модифицировать текст, введеный в мемо1 с помощью словаря settings.ini, и записать новый текст в мемо2. При компиляции ошибок нету, но при вводе слова и нажатии на кнопку вылетает с ошибкой.

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
p,i,setarr: integer;
tmp, modif: string;
begin
setarr:=0;
for i:=0 to memo1.lines.Count-1 do
begin
//замена знаков на знаки с пробелами
tmp:=memo1.Lines[i];
tmp:=stringreplace(tmp,',',' ,',[rfReplaceAll]);
tmp:=stringreplace(tmp,'!',' !',[rfReplaceAll]);
tmp:=stringreplace(tmp,'?',' ?',[rfReplaceAll]);
tmp:=stringreplace(tmp,'.',' .',[rfReplaceAll]);
// начали разбиение на слова
while length(tmp)>0 do
begin
inc(setarr);// увеличиваем длину массива на 1
p:=pos(tmp,'');
SetLength(words,setarr);
words[i]:=copy(tmp,1,p);
delete(tmp,1,p+1);
end;
//заполнили массив словами и символами разделения
end;


//получаем измененные слова в строку
for i:=0 to setarr do
begin
modif:=modif+translate(words[i]);
end;

end;

function TForm1.translate(slovo: string): string; // функция перевода слов
var
changeword: string;
begin
tr:=tinifile.Create('settings.ini');
changeword:=tr.ReadString('translate', slovo, slovo); //ищем в словаре слово
result:=changeword;
end;
Если у кого-то есть время или желания, пожалуйста, помогите разобраться Естесственно с меня +

Последний раз редактировалось T-dayne; 27.02.2010 в 09:56.
T-dayne вне форума Ответить с цитированием
Старый 26.02.2010, 20:34   #2
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию

во-первых если что-то создаешь, особенно инишник, то после обращения надо сделать
Код:
tr.free;
buf.free;
навскидку все, попробуй поправить, если будет ошибка еще поглядим
fbus вне форума Ответить с цитированием
Старый 26.02.2010, 21:13   #3
T-dayne
Пользователь
 
Аватар для T-dayne
 
Регистрация: 07.02.2010
Сообщений: 54
По умолчанию

исправил... ошибка не в этом, при вылете ошибки не показывает ерроры в коде, показывает ошибку в строчке
Цитата:
Application.Run;
в коде самого проекта.
T-dayne вне форума Ответить с цитированием
Старый 26.02.2010, 21:22   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
вылетает с ошибкой.
КАКАЯ? ГДЕ?
приведение места и текста ошибки позволяет значительно сократить время получения ответа.

p:=pos(tmp,'');
далее нет проверки полученного значения p(вдруг в строке там нет того что нам надо)
а при условии ПОИСКА в ПУСТОЙ СТРОКЕ '' (по синтаксису это строка где ищем)
да и поиск пустой строки pos('',tmp) тоже был бы не очень понятен
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 26.02.2010, 21:26   #5
Serebro
FORTRAN programmer
Форумчанин
 
Регистрация: 08.12.2009
Сообщений: 153
По умолчанию

Для поиска ошибки можно вставить побольше операторов вывода в код программы.
Serebro вне форума Ответить с цитированием
Старый 26.02.2010, 21:29   #6
T-dayne
Пользователь
 
Аватар для T-dayne
 
Регистрация: 07.02.2010
Сообщений: 54
По умолчанию

Цитата:
да и поиск пустой строки pos('',tmp) тоже был бы не очень понятен
почему? это мне и нужно, посчитать количество символов от начала до конца слова.
Цитата:
далее нет проверки полученного значения p(вдруг в строке там нет того что нам надо)
а при условии ПОИСКА в ПУСТОЙ СТРОКЕ '' (по синтаксису это строка где ищем)
В программу я ввожу такой текст где это исключено.

Насчет ошибки... сомневаюсь что это много сообщит Вам, но все же
T-dayne вне форума Ответить с цитированием
Старый 26.02.2010, 21:43   #7
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию

поставь брейкпоинты (F5) на событие нажатия на кнопку, потом жми F8 пока не вылезет ошибка, когда вылезет запомни на какой строчке это случилось. она и виновата
fbus вне форума Ответить с цитированием
Старый 26.02.2010, 22:03   #8
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Сообщение от T-dayne Посмотреть сообщение
Код:
inc(setarr);// увеличиваем длину массива на 1
p:=pos(tmp,'');
SetLength(words,setarr);
words[i+1]:=copy(tmp,1,p);
Индексация динамических массивов начинается с нуля.
SetLength(words,setarr); при первом проходе длина установится равной один, что означает примерно следующее word: array[0..0] of string[255]
Эта команда words[i+1] обращается к word[1] при первой итерации, а у тебя можно только word[0].
Убирай "+1"
eoln вне форума Ответить с цитированием
Старый 26.02.2010, 22:11   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

пустая строка всегда найдется по сути это промежуток нулевой длины меду буквами который всегда есть в любой строке

роs('','здесь_может быть_любой_текст') ВСЕГДА =1

Цитата:
посчитать количество символов от начала до конца слова.
length('слово')
последний - первый

надо искать ограничители слова пробелы
k1:=posex(' ',tst,1);
k2:=posex(' ',tst.k1+1);
k2-k1-1 длина
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 26.02.2010 в 22:20.
evg_m вне форума Ответить с цитированием
Старый 27.02.2010, 08:05   #10
T-dayne
Пользователь
 
Аватар для T-dayne
 
Регистрация: 07.02.2010
Сообщений: 54
По умолчанию

eoln
После убирания "+1" и при нажатии на кнопку, программа впадает в ступор, грузится процессор и ежесекундно пожирается память
T-dayne вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПК выдает ошибку при обращении к несуществующему дочернему окну KaimNotark БД в Delphi 3 12.02.2010 10:16
выдает ошибку при вызове scanf Wi1D Общие вопросы C/C++ 6 27.12.2009 19:53
Программа выдает ошибку на нуле Panika Помощь студентам 1 11.11.2009 21:42
При активизации формы выдает ошибку Canadec Общие вопросы Delphi 11 04.09.2007 12:10