Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.09.2011, 17:55
iluxa1810 iluxa1810 вне форума
Новичок
 
Регистрация: 06.10.2010
Сообщения: 51
Репутация: 10
Смущение Программирование кнопки удаления записи

Код:
procedure TForm1.Button5Click(Sender: TObject);
var i:integer;
begin
Seek(NoteFile, pos);
Truncate(NoteFile);
Button2.Enabled:=false;
if pos<>0 then dec(pos)
else
begin
Button5.Enabled:=false;
ClearDate;
end;
if pos>=0 then
begin
for i:=pos+1 to FileSize(NoteFile)-1 Do
begin
Seek(NoteFile,i);
Read(NoteFile, NoteData);
Seek(NoteFile, i-1);
Write(NoteFile, NoteData);
end;
Seek(NoteFile, FileSize(NoteFile) -1);
Truncate(NoteFile);
end;
Seek(NoteFile, pos);
Read(NoteFile, NoteData); ShowRecord;
if pos=-1 then
begin
Button1.Enabled := false; {Кнопка возвращения назад}
end;
 
end;
Задали перебить программу,а там код глючненный и с ошибками...Пытаюсь методом проб и ошибок его довести до ума,но что-то не получается.Что тут следует дописать и заменить?
P.S А какую позицию принимает pos если файл пуст? Считывание файла начинается с 0 позиции?
Ответить с цитированием
  #2  
Старый 25.09.2011, 18:40
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

http://www.vihv.org/index.php?e=CodeSmells
лечится или рефакторингом или переписыванием с нуля
Ответить с цитированием
  #3  
Старый 25.09.2011, 22:26
iluxa1810 iluxa1810 вне форума
Новичок
 
Регистрация: 06.10.2010
Сообщения: 51
Репутация: 10
По умолчанию

А поправить код этот никто тут не может?
Ответить с цитированием
  #4  
Старый 25.09.2011, 22:33
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Этот код тяжело "подправить". Он неполный, пиши с нуля.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 25.09.2011, 23:13
iluxa1810 iluxa1810 вне форума
Новичок
 
Регистрация: 06.10.2010
Сообщения: 51
Репутация: 10
По умолчанию

Могу попробовать...
Ну мне нужны ответы на некоторые вопросы:
Какую pos имеет пустой?
Какой Pos у первой записи в файле?
Для того чтобы написать правильно код мне нужно разобрать:
а)Строка является единственной строкой в файле
б)Строка является последней в файле
в)Стока является началом или серединой файла(Вроде отличий между этими 2 случаем нет на мой згляд...)
Правильно?
Ответить с цитированием
  #6  
Старый 25.09.2011, 23:54
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Неужели тяжело справку почитать?
Цитата:
Returns the index value of the first character in a specified substring that occurs in a given string.

Delphi syntax:

function Pos(Substr: string; S: string): Integer;

Description

In Delphi, Pos searches for a substring, Substr, in a string, S. Substr and S are string-type expressions.

Pos searches for Substr within S and returns an integer value that is the index of the first character of Substr within S. Pos is case-sensitive. If Substr is not found, Pos returns zero.
Код:
var
  S : string;
begin
  S := '   123.5';
  { Convert spaces to zeros }
  while Pos(' ', S) > 0 do
    S[Pos(' ', S)] := '0';
end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 26.09.2011, 11:10
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Цитата:
Сообщение от iluxa1810
Могу попробовать...
Ну мне нужны ответы на некоторые вопросы:
Какую pos имеет пустой?
Какой Pos у первой записи в файле?
Для того чтобы написать правильно код мне нужно разобрать:
а)Строка является единственной строкой в файле
б)Строка является последней в файле
в)Стока является началом или серединой файла(Вроде отличий между этими 2 случаем нет на мой згляд...)
Правильно?
Не назначайте переменным имена стандартных функций(pos), тогда не будут появляться ответы типа angvelem.
А по делу
Имеем типизованый файл, тогда
Если FileSize(NoteFile) равно нулю, то файл пустой.
У первой записи позиция равна нулю.
У последней записи позиция равна FileSize(NoteFile)-1.
Ответить с цитированием
  #8  
Старый 26.09.2011, 15:38
iluxa1810 iluxa1810 вне форума
Новичок
 
Регистрация: 06.10.2010
Сообщения: 51
Репутация: 10
По умолчанию

http://dump.ru/file/5399001
Вот вся программа,с не рабочим удалением
Ответить с цитированием
  #10  
Старый 26.09.2011, 19:31
iluxa1810 iluxa1810 вне форума
Новичок
 
Регистрация: 06.10.2010
Сообщения: 51
Репутация: 10
По умолчанию

Помогите,я перепробовал все ,что бы заставить кнопку работать как надо,но ничего не получается.
Мне кажется ,что этот глюк происходит из-за использования Truncate,но кроме него мне кажется ничего использовать нельзя.
Delete вроде только в строковых типах юзается...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:58.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025