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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2016, 06:25   #1
Алиби
Пользователь
 
Регистрация: 23.11.2016
Сообщений: 31
По умолчанию TStringlist - сравнение текстовых файлов с ip и mac

у меня есть bat файл он выполняется и создает текстовый файл с указанием ip mac через copy я взял ip и mac по отдельности и записал в переменную также есть 2 текстовый файл где указаны все ip и mac адреса включая тех кто сейчас не в сети(отключен компьютер) и также через copy вывел по отдельности ip и mac и записал в переменную как мне сделать так чтобы сравнить ip и mac с первого текстового файла со вторым ?и как мне сделать чтобы типо ip=mac и сравнить с другим ip=mac и если ip не равно mac то вывести их куда нибудь
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,Shellapi, StdCtrls,Unit2;

type

  ipmac = record
    ip : string;
    mac :string;
    ip1 : string;
    mac1 :string;

  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    Memo1: TMemo;
    ComboBox3: TComboBox;
    ComboBox4: TComboBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  str,s:TStringList;

implementation


{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

DeleteFile('file.txt');

winexec(Pansichar('ip-mac.bat'),sw_show);

end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i,n,k,j,m,l,h:integer;
  adres:ipmac;
  macip:string;
begin


 s:=TstringList.create;
 str:=Tstringlist.Create;
 Form2.ShowModal;
  if FileExists('file.txt') then
   str.LoadFromFile('file.txt');
      if FileExists('file1.txt') then
         s.LoadFromFile('file1.txt');
            // загрузка файла
    Form2.memo2.Lines.LoadFromFile('file1.txt');


 for i := 3 to str.Count-4 do
  begin
   str[i]:=trim(str[i]);  //удаляем пробелы
   n:=pos(#32,str[i]);      //пробел
   adres.ip:=copy(str[i],1,n);   // до первого пробела
   form2.memo1.lines.add(str[i]); // заполняем мемо
   adres.mac:=copy(str[i],n,n+17) ;
   adres.mac:=trim(adres.mac);
   form1.combobox1.Items.Add(adres.ip);
   form1.ComboBox3.Items.Add(adres.mac);
  end;

   for j := 0 to s.count-1 do
   begin
    k:=pos(#32,s[j]);
    adres.ip1:=copy(s[j],1,k);
    adres.mac1:=copy(s[j],k,k+17) ;
    adres.mac1:=trim(adres.mac1);
    form1.ComboBox2.Items.Add(adres.ip1);
    form1.ComboBox4.Items.Add(adres.mac1);
   end;
Алиби вне форума Ответить с цитированием
Старый 27.12.2016, 09:51   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Алиби Посмотреть сообщение
как мне сделать так чтобы сравнить ip и mac с первого текстового файла со вторым ?
перебор и поиск помогут.
по одному списку идёте, во втором списке ищете, нашли - значит есть такое, не нашли, значит, такого нет.

а что нужно получить в итоге?

запакуйте оба текстовых файла, исходники проекта в архив,
обязательно подробно расскажите, что Вы хотите получить в результате, поговорим более конкретно.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.12.2016, 11:15   #3
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Я тоже не совсем понял в чем загвостка, вроде как у автора все есть для поиска. У вас в мемках маки и пипишники как пишуться? По строкам или в 1 строку через разделитель?Выложите пример как заполнено 1 и 2 txt.
Пишу много и развернуто
Heneken87 вне форума Ответить с цитированием
Старый 27.12.2016, 17:35   #4
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Попробуй измени bat файл чтобы он записывай ip и mac в одну строку в файле например так
IP=192.168.0.1, MAC=fg:ff:33:1d:10
IP=192.168.0.2, MAC=fg:ff:33:1d:10
и т.д.
Так проще будет с поиском


далее для извлечения нужной инфы из созданных файлов примени парсинг вот одна из функций здесь на сайте их много

Код:
function Pars(ForS, T_, _T: string): string;
var
  a, b: integer;
begin
  Result := '';
  if (T_ = '') or (ForS = '') or (_T = '') then
    Exit;
  a := Pos(AnsiLowerCase(T_), AnsiLowerCase(ForS));
  if a = 0 then
    Exit
  else
    a := a + Length(T_);
  ForS := Copy(ForS, a, Length(ForS) - a + 1);
  b := Pos(AnsiLowerCase(_T),  AnsiLowerCase(ForS));
  if b > 0 then
    Result := Copy(ForS, 1, b - 1);
end;

используй парсинг так
 for i := 0 to str1.Count-1 do
begin
 adres.ip:=Pars(str1[i], 'IP=', ',');   //извлекаем IP
 adres.mac:=Pars(str1[i], 'MAC=', #13);   //извлекаем MAC
end;
Код:
Поиск по спискам для быстроты я сделал 1 цикл а во втором поиск через pos
 for i := 0 to str1.Count-1 do
if Pos(str1[i] + #13, str2) <> 0 then
begin
Showmessage('Найдена строка ' + str[i]);
break
  end;
Код:
либо поиск по 2 циклам
 for a:= 0 to str1.Count-1 do
 for b:= 0 to str2.Count-1 do
if str1[a] = str2[b] then
begin
Showmessage('Найдена строка ' + str[a]);
break
  end;
Если же они у тебя уже выводят в строчку ip и mac тогда применяй код для поиска

Последний раз редактировалось Aliens_wolfs; 27.12.2016 в 21:18.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение строк в нескольких TStringList PaHaNjkee Общие вопросы Delphi 2 12.11.2016 10:02
Сравнение текстовых файлов demon-sheff Общие вопросы Delphi 3 20.05.2013 09:13
Сравнение строк двух текстовых файлов Alina111 Общие вопросы C/C++ 4 10.01.2013 10:03
Самое быстрое сравнение текстовых файлов blblbl-org Общие вопросы Delphi 17 26.04.2012 15:19
Сравнение текстовых файлов BR17UY Общие вопросы Delphi 15 07.05.2007 20:18