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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2012, 17:55   #1
hackvl
 
Регистрация: 17.05.2010
Сообщений: 4
По умолчанию Вытащить строки из txt

есть файл 1.txt в котором список логинов напримаер
Цитата:
1211212121
333333333
8787878788
555555555
33333333633
777777777
8888888888
и есть 2.txt в котором база например
Цитата:
333333333 t2341 t2341
Blatnoy666 123emo123 aleksey94
555555555 c2713BrOg t2341
Kastiel 7623699 max7623699
777777777 OBrAnOO2716 t2341Tobik
loveira 9036191603 lokomotiv123
нужно вытащить из базы 2.txt все строки которые начинаются словом(логином) из 1.txt
помогите очень нужна прога.
hackvl вне форума Ответить с цитированием
Старый 24.03.2012, 03:35   #2
hackvl
 
Регистрация: 17.05.2010
Сообщений: 4
По умолчанию

Кто поможет? очень нужно
hackvl вне форума Ответить с цитированием
Старый 24.03.2012, 06:01   #3
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Ну тут два варианта либо ini , либо Tstringlist и copy pos delete
Кольша вне форума Ответить с цитированием
Старый 24.03.2012, 07:34   #4
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Код:
uses StrUtils;
{$R *.dfm}

procedure FilterList(const Name:string;Source,Dest:TStrings);
var i:integer;
begin
  for i:= 0 to Source.Count-1 do
  begin
    if AnsiStartsStr(Name,Source[i]) then
      Dest.Append(Source[i]);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Source,Dest:TStringList;
begin
  Source:=TStringList.Create;
  Dest:=TStringList.Create;
  Source.LoadFromFile('1.txt');
  FilterList('111111 ',Source,Dest);
  Dest.SaveToFile('3.txt');
end;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 24.03.2012, 08:13   #5
hackvl
 
Регистрация: 17.05.2010
Сообщений: 4
По умолчанию

нужно чтоб он брал из файла 1 (в нем список логинов) и искал каждый логин во втором файле
Код:
uses StrUtils;
{$R *.dfm}

procedure FilterList(const Name:string;Source,Dest:TStrings);
var i:integer;
begin
  for i:= 0 to Source.Count-1 do
  begin
    if AnsiStartsStr(Name,Source[i]) then
      Dest.Append(Source[i]);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Source,Dest:TStringList;
begin
  Source:=TStringList.Create;
  Dest:=TStringList.Create;
  Source.LoadFromFile('2.txt'); // это файл базы в которой будет искать строки
  FilterList('111111 ',Source,Dest); //тут нужно не определенное слово искать а весь список из файла 1.txt
  Dest.SaveToFile('3.txt');
end;
hackvl вне форума Ответить с цитированием
Старый 24.03.2012, 10:16   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Ну а в чем трабл ? Код Вы чужой поняли, значит малость соображать умеете, вот Вам примитивный вариант, если надо допилите (ибо 3ной цикл, брр, как я мог ), ну и сами обвязку, конечно. Вообще, конечно, по уму, надо просто выделение 1 слова из каждой строки в бд и сравнение, а ещё лучше - сортировать оба файла (можно в памяти) и уже поиск по сортированным с выделением слова и сравнением.
Код:
slbd.loadfromfile('2.txt');
sllogins.loadfromfile('1.txt');
for i := 0 to sllogins.count - 1 do
  for j := 0 to slbd.count - 1 do
    if pos(sllogins[i], slbd[j]) > 0 then
      dest.add(slbd1[j]);

Последний раз редактировалось phomm; 24.03.2012 в 10:23.
phomm вне форума Ответить с цитированием
Старый 24.03.2012, 10:49   #7
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Ну, вы блин, даете... А зачем два цикла? Там же везде после логина пробел. От этого и нужно отталкиваться...
Код:
procedure TForm1.RzBitBtn7Click(Sender: TObject);
var
  i: Integer;
  L1, L2, L3: TStringList;
begin
  L1 := TStringList.Create;
  L2 := TStringList.Create;
  L3 := TStringList.Create;

  L1.LoadFromFile('2.txt');
  L2.LoadFromFile('1.txt');

  for i := 0 to L1.Count - 1 do
    if L2.IndexOf(Copy(L1[i], 1, pos(' ', L1[i]) - 1)) > -1 then
      L3.Add(L1[i]);

      ShowMessage(L3.Text);

  L1.Free;
  L2.Free;
  L3.Free;
end;
_SERGEYX_ вне форума Ответить с цитированием
Старый 24.03.2012, 11:41   #8
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Нет, ну я конечно сразу написал - примитивный вариант, но вот, если честно, индексоф - тоже цикл, у Вас тоже получается тройной цикл (for indexof pos), сложность обоих наших алгоритмов - O(n^3)
Ну и я указал, как добиться ускорения алгоритма. Там ещё можно PosEx ввернуть - тоже побыстрее будет, много чего оптимайзнуть можно, но как известно - лень ))

Но всё равно спасибо за альтернативу

Последний раз редактировалось phomm; 24.03.2012 в 11:43.
phomm вне форума Ответить с цитированием
Старый 25.03.2012, 08:26   #9
hackvl
 
Регистрация: 17.05.2010
Сообщений: 4
По умолчанию

спасибо всем, помогли
hackvl вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск строки в txt файле (С++) slim>>> Помощь студентам 5 12.08.2010 15:19
Как вытащить из таблицы одного листа нужные строки на др лист? alexabv Microsoft Office Excel 3 30.04.2010 12:08
Вытащить строку <title> .... </title> в txt файл kzld HTML и CSS 7 01.07.2009 11:35
Помогите вытащить из строки нужные данные! Romashkaz Общие вопросы C/C++ 0 22.11.2008 13:30
Вытащить адреса из строки формул Alkaline Microsoft Office Excel 7 06.12.2007 13:46