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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.07.2008, 10:00
MSD MSD вне форума
Прохожий
 
Регистрация: 29.03.2008
Сообщения: 35
Репутация: 10
Печаль Работа с текстовым файлом

подскажите пожалуйста мастера как можно в текстовом файле оставить нужные куски текста? Допустим есть текстовый файл с содежимым:
Саша 47 ....
какой-то текст
НатаШа 56....
дальше не нужный текст
Саша 78....
какой-то текст
НатаШа 71.....
нужно чтобы осталось
Саша 47 ....
какой-то текст
НатаШа 56....
Саша 78....
какой-то текст
НатаШа 71.....
т.е. нужно чтобы остались только нужные куски. Саша и Наташа в одной строке не попадаются. Бьюсь ни как не могу додуматься как сделать. Подскажите с примером плиз. Спсибо.
Ответить с цитированием
  #2  
Старый 27.07.2008, 12:00
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Код:
var
i: Integer;
...
with TStringList.Create do
begin
LoadFromFile('f.txt');
for i:=0 to Count - 1 do
if not ((Pos('САША', AnsiUpperCase(Strings[i])) <> 0) or (Pos('НАТАША', AnsiUpperCase(Strings[i])) <> 0)) then Delete(i);
SaveToFile('f.txt');
Free;
end;
В условии мог ошибиться.
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
  #3  
Старый 27.07.2008, 12:25
MSD MSD вне форума
Прохожий
 
Регистрация: 29.03.2008
Сообщения: 35
Репутация: 10
По умолчанию Ошибку выдает.. (

Выдает ошибку
Project Project1.exe raised exception class EStringListError with message 'List index out of bounds (1020)'. Progress stopped. Use Step or Run to continue. Что такое?
Ответить с цитированием
  #4  
Старый 27.07.2008, 12:37
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Не знаю почему так получилось
Код:
var
  i: Integer;
  f: Array of String;
  tmp: String;
begin
  AssignFile(Input, 'f.txt');
  Reset(Input);
  while not Eof(Input) do
  begin
    Readln(Input, tmp);
    if (Pos('САША', AnsiUpperCase(tmp)) <> 0) or (Pos('НАТАША', AnsiUpperCase(tmp)) <> 0) then
    begin
      SetLength(f, Length(f) + 1);
      f[High(f)]:=tmp;
    end;
  end;
  CloseFile(Input);
  Rewrite(Input);
  for i:=0 to Length(f) - 1 do
  Writeln(Input, f[i]);
  CloseFile(Input);
end;
Проверил, работает.
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
  #5  
Старый 27.07.2008, 12:50
MSD MSD вне форума
Прохожий
 
Регистрация: 29.03.2008
Сообщения: 35
Репутация: 10
По умолчанию Не то....

В файле остается только Саша и Наташа, а как же текст между ними , нужно чтобы текст между ними тоже оставался...
Ответить с цитированием
  #6  
Старый 27.07.2008, 12:53
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Значит я не так понял условие, а что именно должно остаться?
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
  #7  
Старый 27.07.2008, 13:01
MSD MSD вне форума
Прохожий
 
Регистрация: 29.03.2008
Сообщения: 35
Репутация: 10
По умолчанию

Вот смотри есть текст в текстовом файле (большом):

сдесь текст который
не нужен............ // этот текст не должен попасть в результат

Саша №45 //этот текст попадает в результат
сдесь текст кторый
нужен и должен
остаться
НаТаша №90

сдесь текст который
не нужен............ // этот текст не должен попасть в результат

Саша №56 //этот текст попадает в результат
сдесь текст кторый
нужен и должен
остаться
НаТаша №78

и.т.д.
в результате должно сотаться:
Саша №45 //этот текст попадает в результат
сдесь текст кторый
нужен и должен
остаться
НаТаша №90

СаШа №56 //этот текст попадает в результат
сдесь текст кторый
нужен и должен
остаться
НаТаша №78

вот..
Ответить с цитированием
  #8  
Старый 27.07.2008, 13:12
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

То есть от Саши до Наташи надо, от Наташи до Саши не надо?
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
  #9  
Старый 27.07.2008, 13:14
MSD MSD вне форума
Прохожий
 
Регистрация: 29.03.2008
Сообщения: 35
Репутация: 10
По умолчанию

ДА в точку
Ответить с цитированием
  #10  
Старый 27.07.2008, 13:19
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Код:
var
  i: Integer;
  F: Array of String;
  Tmp: String;
  DoCopy: Boolean;
begin
  DoCopy:=False;
  AssignFile(Input, 'f.txt');
  Reset(Input);
  while not Eof(Input) do
  begin
    Readln(Input, Tmp);
    if Pos('САША', AnsiUpperCase(Tmp)) <> 0 then
    DoCopy:=True;
    if DoCopy then
    begin
      SetLength(F, Length(f) + 1);
      F[High(F)]:=Tmp;
    end;
    if Pos('НАТАША', AnsiUpperCase(Tmp)) <> 0 then
    DoCopy:=False;
  end;
  CloseFile(Input);
  Rewrite(Input);
  for i:=0 to Length(F) - 1 do
  Writeln(Input, F[i]);
  CloseFile(Input);
end;
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
  #11  
Старый 27.07.2008, 13:26
MSD MSD вне форума
Прохожий
 
Регистрация: 29.03.2008
Сообщения: 35
Репутация: 10
Хорошо

ВСЕ ОТЛИЧНО!!! РАБОТАЕТ!!! СПАСИБО!!! ОГРОМНОЕ СПАСИБО. ТЫ МЕНЯ СПАС...
Ответить с цитированием
  #12  
Старый 28.07.2008, 10:49
MSD MSD вне форума
Прохожий
 
Регистрация: 29.03.2008
Сообщения: 35
Репутация: 10
По умолчанию

И еще вопросик... Подскажите пожалуйста как обрезать в текстовом файле длину строк до одного слова, и в конце оставщегося слова добавить ; И еще одна сложность в начале строки могут начанаться с пробела. , а мне нужно 1 слово.
Например:
есть текст:
Иван ПетроВ
Сергей Коновалов
Саша Пупкин

и.т.д.
а должно остаться:
Иван;
Сергей;
Саша;
и.т.д

Спасибо
Ответить с цитированием
  #13  
Старый 28.07.2008, 13:06
JIexa21 JIexa21 вне форума
Прохожий
 
Регистрация: 23.07.2008
Адрес: Россия, Новочебоксарск
Сообщения: 15
Репутация: 10
По умолчанию

Конструкция типа str = str + ';' добавит в конце точку с запятой.

И попробуй вот так обрезать:
Код:
procedure TForm1.Edit1Change(Sender: TObject);
begin
Edit2.Text := TrimLeft(copy(Edit1.Text,0,pos(' ',(Edit1.Text))-1)+ ';');
end;

Еще забыл - обрезать пробелы в начале можно командой TrimLeft.

Последний раз редактировалось JIexa21, 28.07.2008 в 13:41.
Ответить с цитированием
  #14  
Старый 28.07.2008, 13:22
MSD MSD вне форума
Прохожий
 
Регистрация: 29.03.2008
Сообщения: 35
Репутация: 10
По умолчанию

Это конечно хорошо, спасибо за подсказку, только вот как это все применить к текстовому файлику в котором очень много строк?
Ответить с цитированием
  #15  
Старый 28.07.2008, 13:37
JIexa21 JIexa21 вне форума
Прохожий
 
Регистрация: 23.07.2008
Адрес: Россия, Новочебоксарск
Сообщения: 15
Репутация: 10
По умолчанию

Честно говоря я не совсем понял содержимое твоего текстового файла. Сначала у тебя одни условия, потом другие... Поэтому дал строчку которую я бы сделал у себя при похожих условиях. Или это два разных файла?
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter