| 
| 
 | Вопрос # 4 245/ вопрос открыт / | 
 |  Здравствуйте!Помогите пожалуйста реализовать следующее. Задача заключается в том, чтобы загрузить из файла диапазоны IP и сравнить их с IP присоединяющегося. Файл *.cfg с таким содержимым:
 3
 127.0.0.0
 127.0.0.255
 128.0.0.0
 128.0.0.255
 129.0.0.0
 129.0.0.255
 
 При чтении командой ReadLn, в первой строке глубина цикла, от 1 до этого значения. Затем, в цикле подряд два оператора чтения ReadLn, первый сохраняет в запись ячейки "От", второй в запись "По". Сам массив от 1 до значения, что считано с первой строки файла.
 
|  |   Вопрос задал: Shouldercannon (статус: Посетитель)Вопрос отправлен: 30 мая 2010, 11:51
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 8; последнее сообщение — 30 мая 2010, 15:33; участников в обсуждении: 4. 
|   | min@y™ (статус: Доктор наук), 30 мая 2010, 11:58 [#1]:Ну и в чём проблема? Не знаешь, как пропарсить файл? Конкретизируй задачу, Разложи её по пунктам:
 1. Загрузить файл.
 2...
 3...
 ...
 N.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Shouldercannon (статус: Посетитель), 30 мая 2010, 13:59 [#2]: ...
var
  Data: TStringList;
  Range, s: Integer;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
Data := TStringList.Create;
  Data.Duplicates := dupIgnore;
end;
 
procedure TForm1.BLoadClick(Sender: TObject);
begin
Data.LoadFromFile('IPRanges.cfg'); //Загружаю
  Memo1.Text := Data.Text; //Вывожу (для себя)
 
//Тут опрделяю сколько нужно считывать "C" - "По"
Range := StrToInt(Copy(Data.Text, 1, 1));
  s := 0;
    while  s < Range do
      begin
        s := s + 1;
      end;
end;Не знаю правильно ли я начал, и что делать дальше. |  
|   | bugmenot (статус: 3-ий класс), 30 мая 2010, 14:20 [#3]:а что за такое модное форматирование? виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | IlluminatI (статус: 2-ой класс), 30 мая 2010, 14:23 [#4]:Да все намного проще. 
 var
 N, i: integer; // "глубина цикла", параметр
 s: string; // строка
begin 
 AssignFile(Input,'Путь к cfg файлу');
 Readln(Input, N);
 for i := 1 to N do 
  begin
   Readln(Input, S);
   // проверка на совпадение IP адресов
   if S = <IP подключающегося> then
    begin
     // что-то делаем
    end;
  end;
 CloseFile(Input); // поработали - закроем
 // ...
end;Писал тут, возможны небольшие ошибки
 |  
|   | min@y™ (статус: Доктор наук), 30 мая 2010, 14:25 [#5]: Цитата (Shouldercannon): Не знаю правильно ли я начал, и что делать дальше.  Всё равно не понимаю, что тебе нужно сделать. Объясни подробнее.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Shouldercannon (статус: Посетитель), 30 мая 2010, 15:13 [#6]:Вот весь расклад. Я с помощью данного кода проверяю IP на совпадение 
 ...
function IPtoDWORD(const s: string):DWORD;
var
L: TStringList;
b: packed array [0..3] of byte;
i: Integer;
begin
Result := 0;
  L := TStringList.Create;
    try
      L.Delimiter := '.';
        L.DelimitedText := s;
          for i := 0 to 3 do
            b[3 - i] := StrToInt(L[i]);
              Result := pdword(@b[0])^;
    finally
      L.Free
    end;
end;
...
if (NewIP >= IPtoDWORD('192.168.0.0')) and (NewIP <= IPtoDWORD('192.168.0.255')) then
  //Пускаем
    else
      ServerSocket.Socket.Connections[i - 1].SendText('запрет'); //Запрет
        ServerSocket.Socket.Connections[i - 1].Close; //Закрываем канал
          if (NewIP >= IPtoDWORD('193.168.0.0')) and (NewIP <= IPtoDWORD('193.168.0.255')) then
            //Пускаем
            if (NewIP >= IPtoDWORD('194.168.0.0')) and (NewIP <= IPtoDWORD('194.168.0.255')) then
              //Пускаем
                if (NewIP >= IPtoDWORD('195.168.0.0')) and (NewIP <= IPtoDWORD('195.168.0.255')) then
                  //Пускаем
...Всёбы хорошо, но значения фиксированные, а требуется их загружать из файла. |  
|   | min@y™ (статус: Доктор наук), 30 мая 2010, 15:30 [#7]: Цитата (Shouldercannon): Всёбы хорошо, но значения фиксированные, а требуется их загружать из файла.  Загрузи значения в TStringList, преобразуй сразу в список из DWORD-значений. Потом сравнивай.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | min@y™ (статус: Доктор наук), 30 мая 2010, 15:33 [#8]:Хотя, имхо, лучше и проще разработать свой класс, который бы занимался загрузкой, преобразованием и хранением списка и имел бы метод проверки вхождения данного IP-адреса в список. Было бы компактно, красиво и прозрачно. Можно также предусмотреть пополнение списка новыми адресами и сохранения списка в файл. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |