Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Удаление определенной строки из файла, Удаление строки,из файла для словаря 
V
    Опции темы
Костя1992
Дата 8.12.2011, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 8.12.2011

Репутация: нет
Всего: нет



Ситцация такова
у меня есть 3 файла:
1-С английскими словами
2-С рускими
3-а в третем файле записано тип слова "слово" или термин
Так вот,при удалении слова мне нужно удалить слова из файлов,руское и англ слово удаляю без проблем,а вот с третьего файло трудно удалить.
покажу как это все выглядит к примеру


1 тхт                      2тхт              3 txt

кот                         cat                   слово
дом                         house            термин
сыр                         cheese           слово
собака                  dog                  термин
двери                      door               термин

и когда я выберу удалить слово "сыр" должно быть
кот                         cat                   слово
дом                         house            термин
собака                  dog                  термин
двери                      door               термин

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


вот кусок кода:
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
s1:=tstringlist.Create;
s1.LoadFromFile('1.txt');

s2:=tstringlist.Create;
s2.LoadFromFile('2.txt');

s3:=tstringlist.Create;
s3.LoadFromFile('3.txt');



end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if radiobutton1.Checked then
begin
if s1.IndexOf(edit1.Text)<>-1 then
edit2.Text:=s2.Strings[s1.IndexOf(edit1.Text)];
 edit3.Text:=s3.Strings[s1.IndexOf(edit1.Text)];
end else
begin
if s2.IndexOf(edit1.Text)<>-1 then
edit2.Text:=s1.Strings[s2.IndexOf(edit1.Text)];
edit3.Text:=s3.Strings[s2.IndexOf(edit1.Text)];
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
form2.show;
end;
 procedure FoundWordAndDeleteFromFile(FileName, Word:string);
// Процедура видалення елемента
var
 F:TStringList;
 I: integer; k:boolean;
begin
k:=false;
 F:=TStringList.Create;
 F.LoadFromFile(FileName);
  for I := F.Count - 1 downto 0 do begin
   if Pos(Word, F.Strings[I]) > 0 then
     if k=false then begin
    F.Delete(I);
    k:=true;end;
  end;
 F.SaveToFile(FileName);
 ShowMessage(IntToStr(F.Count));
 F.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);

var word,word1:string; sl,tr :integer ; MyFile:textfile;
 begin
 if radiobutton1.Checked then
 begin
 word:=edit1.text;
FoundWordAndDeleteFromFile('1.txt',Word);
word1:=edit2.text;
FoundWordAndDeleteFromFile('2.txt',Word1);
FoundWordAndDeleteFromFile('3.txt',s1.Strings[s1.IndexOf(edit1.Text)]) ;
end
else begin
word:=edit1.text;
FoundWordAndDeleteFromFile('2.txt',Word);
word1:=edit2.text;
FoundWordAndDeleteFromFile('1.txt',Word1);

end;


M
MetalFan
Пользуемся кнопкой КОД для выделения кода


Это сообщение отредактировал(а) MetalFan - 8.12.2011, 09:14
PM MAIL   Вверх
Костя1992
Дата 8.12.2011, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 8.12.2011

Репутация: нет
Всего: нет



Активнее пожалуста=)пишите свои идеи. или возможно просто перезаписать файл но без єтой строчки?но с кодом помогите=)
PM MAIL   Вверх
MetalFan
Дата 8.12.2011, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Поиск и удаление (FoundWordAndDeleteFromFile) сделаны неоптимально. У TStringList есть метод IndexOf, поиск строки в спике. 
В твоем случае Pos найдет и "сыр" и "сырный" и "сырой".
Соотв. алгоритм прост: если надо удалить слово в каждом списке с определенной позиции, то ищещь в первом или втором списке слово или перевод, получаешь его индекс (TStringList.IndexOf), затем просто удаляешь эту строку из всех трех списков (TStringList.Delete)

А вообще теме место в ЦП имхо...


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Keeper89
Дата 8.12.2011, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Для подобных вещей есть базы данных. 
А так +1 к MetalFan.


--------------------
PM MAIL WWW   Вверх
MetalFan
Дата 8.12.2011, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Keeper89, дану, какие БД, это ж лаба или контрольная какая-то)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
14SatanA88
Дата 8.12.2011, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: нет
Всего: 5



Костя1992,  делайте не 3 файла, а один, просто разделяя слова каким-нибудь знаком
в этом случае удаление одной единственной строки решит вопрос
PM MAIL ICQ   Вверх
Костя1992
Дата 8.12.2011, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 8.12.2011

Репутация: нет
Всего: нет



Спасибо,буду что то пробвать,если выйдет-скину сюда текст всего словаря,может пригодиться кому -то.
PM MAIL   Вверх
Данкинг
Дата 8.12.2011, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



А чем "термин" от "слова" отличается? И door == дверь, а не двери. Cat == кошка, а не кот. smile

Добавлено через 55 секунд
Вообще с БД это наиболее просто было бы, согласен.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Костя1992
Дата 8.12.2011, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 8.12.2011

Репутация: нет
Всего: нет



Код

z:= s2.IndexOf(edit1.Text);

procedure FoundWordAndDeleteFromFile(FileName: string; z:integer);
var
 F:TStringList;

begin
 F:=TStringList.Create;
 F.LoadFromFile(FileName);
 F.Delete(z);
 F.SaveToFile(FileName);
 ShowMessage(IntToStr(F.Count));
 F.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);
var  sl,tr :integer ; MyFile:textfile;
begin
if radiobutton1.Checked then
begin
FoundWordAndDeleteFromFile('1.txt',z);
FoundWordAndDeleteFromFile('2.txt',z);
FoundWordAndDeleteFromFile('3.txt',z);


задача решина.Всем большое спасибо.

Добавлено @ 18:25
Данкинг , там словарь будтет из слов и абревиатур. Но так как програма в режиме разробки то так сделал.



 ! 
MetalFan
Сколько можно напоминать?! Пользуйся кнопкой "КОД"!!!


Это сообщение отредактировал(а) MetalFan - 8.12.2011, 19:02
PM MAIL   Вверх
k0rvin
Дата 8.12.2011, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: нет
Всего: 5



Цитата(Keeper89 @ 8.12.2011,  11:35)
Для подобных вещей есть базы данных. 

да, нужно оракл заюзать, не иначе =)


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Данкинг
Дата 8.12.2011, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



k0rvin, при чём здесь Оракл? Локальная база вроде Access - самое оно.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Keeper89
Дата 9.12.2011, 03:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



k0rvin, я люблю для словариков использовать SQL Server в полной комплектации  smile 


--------------------
PM MAIL WWW   Вверх
Костя1992
Дата 9.12.2011, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 8.12.2011

Репутация: нет
Всего: нет



Согласен,я выбрал "примитивный" метод решения этой задачи. Просто еще не учили базы даных. А самому лень учить, сейчас в основном налягаю на изучения С++
PM MAIL   Вверх
Данкинг
Дата 9.12.2011, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Цитата(Костя1992 @  9.12.2011,  12:18 Найти цитируемый пост)
Просто еще не учили базы даных. А самому лень учить, сейчас в основном налягаю на изучения С++ 

Ну так подключайся к базам из C++, какая в данном контексте разница. Всё равно же пригодится.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
MetalFan
Дата 9.12.2011, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128




M
MetalFan
Модератор: Заканчиваем флуд. ТС поставил конкретный вопрос - ему ответили.



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0579 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.