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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2018, 14:57   #1
Алексей0001
Пользователь
 
Регистрация: 25.11.2017
Сообщений: 39
По умолчанию проверка ip адреса

есть stringgrid куда загружаем файл, в нем есть столбец с ip адресом
нужно проверить столбец на правильность оформления ip адреса
например 1.2.201.196, нужно проверить чтобы было 3 символа
если их нету то добавляем нулями чтобы получилось так
001.002.201.196
написал так, но бьет ошибку с типом данных
Код:
var
v,i,j,d:integer;
s,k,p:string;
l:TStringList;
arr: array of String;
begin
l:=TStringList.Create;
 with StringGrid1 do
  for i := 0 to l.Count - 1 do
    begin
      
      for j := 1 to l.Count - 1 do //проводим цикл по нужному столбцу
      begin
      Cells[i, j]:=p;  //присваиваем p элемент массива
      l.Text:= p;  //в стринглист заносим текст p
      l.Delimiter:='.'; //устанавливаем разделитель
      SetLength(arr, l.Count);
      for v:= 0 to Length(arr)-1 do
      arr[v] := l[v]; 
     // arr[d]:=p; //в массив добовляем элемент p
     // for d:=0 to p do //проводим цикл по массиву
     // begin
      while IntToStr(Length(l)) = 3 do  //усовия, покуда p не будет равно 3 добовляем 0
      insert('0',l[v],1);
      
       end
        
      end;

end;
Алексей0001 вне форума Ответить с цитированием
Старый 21.03.2018, 15:29   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Алексей0001 Посмотреть сообщение
Код:
l:=TStringList.Create;
for i := 0 to l.Count - 1 do ...
всё. дальше уже можно не смотреть - цикл НИ РАЗУ не выполнится.
ну и с чего он вдруг будет выполняться - изначально stringlist пустой.

Алгоритм абсолютно никуда не годится.

Лучше расскажите, что у Вас на входе и что нужно получить на выходе.
Есть файл на входе и нужно получить файл на выходе?
Зачем и как в этой схеме нужен StringGrid ?
И что делать с ошибками (если это ошибки)?
ну, например,
Код:
1.   5. 1.  17
7.7.8.
0.1.1.1
277.1.1.2
x.x.255.0
p.s.
Цитата:
Сообщение от Алексей0001 Посмотреть сообщение
чтобы было 3 символа
кстати, а зачем это нужно?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.03.2018, 15:37   #3
Алексей0001
Пользователь
 
Регистрация: 25.11.2017
Сообщений: 39
По умолчанию

Код:
var
v,i,j,d:integer;
s,k,p:string;
l,tl:TStringList;
arr: array of String;
begin
 if not OpenDialog1.Execute then
    exit;
  l := TStringList.Create;
  l.LoadFromFile(OpenDialog1.FileName);
  tl := TStringList.Create;
  tl.delimiter := ',';
 with StringGrid1 do
  for i := 0 to l.Count - 1 do
    begin
      
      for j := 1 to l.Count - 1 do //проводим цикл по нужному столбцу
      begin
      Cells[i, j]:=p;  //присваиваем p элемент массива
      l.Text:= p;  //в стринглист заносим текст p
      l.Delimiter:='.'; //устанавливаем разделитель
      SetLength(arr, l.Count);
      for v:= 0 to Length(arr)-1 do
      arr[v] := l[v]; 
     // arr[d]:=p; //в массив добовляем элемент p
     // for d:=0 to p do //проводим цикл по массиву
     // begin
      while IntToStr(Length(l)) = 3 do  //усовия, покуда p не будет равно 3 добовляем 0
      insert('0',l[v],1);
      
       end
        
      end;

end;
вот, открываем файл заносим в stringrid(разбиваем его)
4 столбец в таблицы с ип адресом(проверяем только этот столбец)


например у нас
Код:
 1.1.1.1
 2.3.0.120
400.234.1.2
а должно быть так
Код:
001.001.001.001
 002.003.000.120
400.234.001.002
Алексей0001 вне форума Ответить с цитированием
Старый 21.03.2018, 15:53   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы так и не ответили, зачем Вам это надо и что Вы хотите получить в результате.
и про то, что делать с ошибками Вы тоже ничего не сказали.

Не хотите отвечать - воля ваша.
Если Вы просто выкладываете свой код, то хорошо, продолжайте, я не буду Вам мешать своими глупыми вопросами.


Цитата:
Сообщение от Алексей0001 Посмотреть сообщение
400.234.001.002
не знаю, смущает ли Вас это или нет, но ip адрес в записи в виде 4-х десятичных чисел не может иметь значение более 255:
Цитата:
В 4-й версии IP-адрес представляет собой 32-битовое число. Удобной формой записи IP-адреса (IPv4) является запись в виде четырёх десятичных чисел значением от 0 до 255, разделённых точками, например, 192.168.0.3.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.03.2018, 16:03   #5
Алексей0001
Пользователь
 
Регистрация: 25.11.2017
Сообщений: 39
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы так и не ответили, зачем Вам это надо и что Вы хотите получить в результате.
и про то, что делать с ошибками Вы тоже ничего не сказали.
Я же писал уже, что стоит задача, нужно добавить ип адресс нулями(0) если там меньше 3х символов, а на входе ошибок не будет, кроме того что ип адрес будет не полным(будет меньше 3символов), вроде бы на все ваши вопросы ответил
Алексей0001 вне форума Ответить с цитированием
Старый 21.03.2018, 16:29   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var ts, t1 : TStringList;
  s : string;
  i, j : integer;
begin
 if not OpenDialog1.Execute then
    exit;

  ts := TStringList.Create;
  t1 := TStringList.Create;
  t1.Delimiter := '.';
  try
    ts.LoadFromFile(OpenDialog1.FileName);
    StringGrid1.RowCount := ts.Count;
    StringGrid1.ColCount := 1;
    StringGrid1.FixedCols := 0;
    StringGrid1.FixedRows := 0;
    StringGrid1.ColWidths[0] := 150;
    for i := 0 to ts.Count - 1 do begin
       s := ts.Strings[i];
       if Pos('.',s)>0  then begin
         t1.DelimitedText := s;
         s := '';
         for j := 0 to t1.Count - 1 do begin
            s:= s + Format('%.3d',[StrToIntDef(t1.Strings[j],0)]);
            if j< t1.Count - 1 then s := s + '.'
         end;
       end;
       StringGrid1.Cells[0, i] := s
    end;

  finally
    ts.Free;
    t1.Free
  end;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.03.2018, 16:50   #7
Алексей0001
Пользователь
 
Регистрация: 25.11.2017
Сообщений: 39
По умолчанию

первый символ плохо обрабатывается, есть строка
Цитата:
1.2.3.4
и на выходе
Цитата:
000.002.003.004
а должно быть
Код:
001.002.003.004
Алексей0001 вне форума Ответить с цитированием
Старый 21.03.2018, 16:56   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

у меня всё работает:
ppp.png
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.03.2018, 16:56   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Кому подарить мой чудесный модуль со вкусными функциями?

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 21.03.2018, 17:03   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Кому подарить мой чудесный модуль со вкусными функциями?
спасибо, мне не надо.
Да и TC, судя по специфике решаемой им задачи нормальный модуль тоже не очень подойдёт.

BTW, к слову. А у Вас есть функция, которая превращает строчку "1.2.3.4" в "001.002.003.004" ?
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка правильности написания адреса почты. bdfdcdbfv Общие вопросы C/C++ 0 05.04.2015 19:33
Пинг адреса и проверка открытости порта -=Virus=- Работа с сетью в Delphi 2 26.02.2011 12:36
Проверка существование Email адреса на сервере Бутаков_Сергей Работа с сетью в Delphi 7 29.12.2010 01:55
Проверка правильности IP адреса Nester Помощь студентам 2 23.08.2009 14:39