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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2012, 23:23   #1
Я тут новенький
Пользователь
 
Регистрация: 08.04.2012
Сообщений: 18
По умолчанию Как сделать сортировку списка

Здравствуйте!
Мне необходимо сделать сортировку списка по (скажу прямо, по IP адресу)
Список имеет вид такой:
Цитата:
Ник(тут айпи адрес)
Ник(тут айпи адрес) другая информация
Ник(тут айпи адрес) другая информация
...
Ник(тут айпи адрес) другая информация
В общем айпи написан в скобках и без пробела между ником
Сортировать необходимо начинать со 2 строки 1 должна оставаться на месте и желательно если айпи есть похожий с 1 строкой то и пишется
соответственно за ней.
И если это возможно что бы строки с одинаковыми айпи выделялись разными цветами.
Заранее благодарю за любую информацию

P.S на форуме и в интернете искал устал читать много информации но максимум чему научился это сортировать строки по алфавиту, а мне это не надо =(
Ещё раз спасибо.
Я тут новенький вне форума Ответить с цитированием
Старый 16.04.2012, 23:31   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А просто айпи умеешь сортировать? Вытащить-то из строки не сложно его.
Код:
const
  str1 = 'Ник(';
  str2 = ') ';
...
  IndexStart := Pos(str1, список.строка[i]) + length(str1);
  IndexEnd := Pos(str2, список.строка[i]);
  IP := Copy(список.строка[i], IndexStart, IndexEnd - IndexStart);
и про name/values TStringList'а посмотри, мб поможет чем-то.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 16.04.2012 в 23:33.
Alex11223 вне форума Ответить с цитированием
Старый 18.04.2012, 01:25   #3
Я тут новенький
Пользователь
 
Регистрация: 08.04.2012
Сообщений: 18
По умолчанию

Я уже всю голову сломал что то не совсем получается =((
наковырял такой код
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  A, B : Integer;
  S, Word : string;
begin
    s := Memo1.Lines.Text;
    A := Pos('(', S);
    B := Pos(')', S);
      begin
        Word := Copy(S, A+1, B-A-1);
        Memo2.Lines.Text:=Word;
      end;
end;
но он работает только с первой строчкой из списка.
я только научился вырезать нужную мне часть из строчки.
сделал форму с двумя мемо и кнопкой, в 1 мемо пишу исходный текст на кнопке код выше, а во втором мемо выводится только первая строка...
мозг уже кипит...
Помогите кто-нибудь подтолкните меня в нужном направлении
Мне необходимо чтобы выводились все строчки сразу
потом буду учиться делать сортировку.
Спасибо.

Последний раз редактировалось Я тут новенький; 18.04.2012 в 01:29.
Я тут новенький вне форума Ответить с цитированием
Старый 18.04.2012, 02:41   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
s := Memo1.Lines.Text;
    A := Pos('(', S);
    B := Pos(')', S);
    memo2.lines.clear;
    Repeat
        Word := Copy(S, A+1, B-A-1);
        memo2.lines.append(word);
        S:=copy(s,b,length(s)-b);
        A := Pos('(', S);
        B := Pos(')', S);
   until A<1;
Писал с телефона, так что возможны опечатки.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 18.04.2012 в 02:50.
BDA на форуме Ответить с цитированием
Старый 18.04.2012, 11:06   #5
Я тут новенький
Пользователь
 
Регистрация: 08.04.2012
Сообщений: 18
По умолчанию

хм... добавляет в мемо2 явно много строк причём явно больше чем должно быть но все строки пустые кроме 1
Я тут новенький вне форума Ответить с цитированием
Старый 18.04.2012, 11:29   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Проверил и исправил на компе:
Код:
    s := Memo1.Text;
    A := Pos('(', S);
    B := Pos(')', S);
    memo2.lines.clear;
    Repeat
        Word := Copy(S, A+1, B-A-1);
        memo2.lines.append(word);
        S:=copy(s,b+1,length(s)-b);
        A := Pos('(', S);
        B := Pos(')', S);
   until A<1;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 18.04.2012, 15:27   #7
Я тут новенький
Пользователь
 
Регистрация: 08.04.2012
Сообщений: 18
По умолчанию

а как сделать так что бы бралось только то что в строке между первыми скобками
просто строчки имеют и вторые скобки в которых могут быть только 2 буквы
допустим (p) или (m) причём после закрывающей скобки стоит знак двоеточие
я понимаю что это должно как-то облегчить задачу но как её осуществить?
у меня максимум что получилось это из этого
Цитата:
naborbukv(xx.xx.xx.xx) tekst i cifri i znaki(p): teks
получить это
Цитата:
xx.xx.xx.xx) tekst i cifri i znaki(p
либо это
Цитата:
xx.xx.xx.xx
р
а мне необходимо что бы выдавало только это
Цитата:
xx.xx.xx.xx

Последний раз редактировалось Я тут новенький; 18.04.2012 в 15:31.
Я тут новенький вне форума Ответить с цитированием
Старый 18.04.2012, 15:41   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Отключить у memo wordwrap.
Код:
var
  s,word:string;
  a,b,i:integer;
begin
  memo2.lines.clear;
for i:=0 to memo1.Lines.Count-1 do
  begin
    S:=Memo1.Lines.ValueFromIndex[i];
    A := Pos('(', S);
    B := Pos(')', S);
    Word := Copy(S, A+1, B-A-1);
    if word<>'' then
      memo2.lines.append(word);
  end;
end;
Вы, молодец, раз пытаетесь сами решить проблему.

УПД Пример во вложении, правда не знаю, по какому правилу сортировать ip.
Вложения
Тип файла: zip list.zip (220.5 Кб, 7 просмотров)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 18.04.2012 в 16:07.
BDA на форуме Ответить с цитированием
Старый 18.04.2012, 16:11   #9
Я тут новенький
Пользователь
 
Регистрация: 08.04.2012
Сообщений: 18
По умолчанию

Спасибо вам огромное огромное

а сортировать главное что бы одинаковые писались друг с другом...

Спасибо

Последний раз редактировалось Я тут новенький; 18.04.2012 в 16:13.
Я тут новенький вне форума Ответить с цитированием
Старый 20.04.2012, 14:47   #10
Я тут новенький
Пользователь
 
Регистрация: 08.04.2012
Сообщений: 18
По умолчанию

помучившись две ночи вышел следующий код

Код:
procedure TForm1.btn1Click(Sender: TObject);
begin
RichEdit1.Clear;
Clipboard.Clear;
end;

function ip(s: string): int64;
var
  A, B, i: integer;
  d: int64;
  word: string;
  sl: TStringlist;
begin
  d := 0;
  A := Pos('(', S);
  B := Pos(')', S);
  word := Copy(S, A + 1, B - A - 1);
  if word <> '' then
  begin
    sl := tstringlist.Create;
    sl.Delimiter := '.';
    sl.DelimitedText := word;
    for i := 0 to sl.Count - 1 do
      d := d * 255 + strtoint(sl.Strings[i]);
    sl.Destroy;
  end else
    d := -1;
  result := d;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  i, j: integer;
  tmp: string;
begin
  with RichEdit1.Lines do
    for i := 1 to Count - 2 do
      for j := i + 1 to Count - 1 do
      begin
        if ip(Strings[i]) > ip(Strings[j]) then
        begin
          tmp := Strings[i];
          Strings[i] := Strings[j];
          Strings[j] := tmp;
        end;
      end;
end;
на форме 2 кнопки и RichEdit
работает то что надо ставит строки с одинаковыми IP рядом
вопрос в следующем как сделать чтобы строки с одинаковыми IP подкрашивались цветом (пары с разными IP разными цветами)
например так
Цитата:
bukvi(0.0.0.0) text
bukavo4ki(0.0.0.0) text

slovo(1.1.1.1) text
vsjakoe(1.1.1.1) text
raznoe(1.1.1.1) text
Я тут новенький вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать пошаговую сортировку Шелла? Delphi Reydan-46 Помощь студентам 2 23.03.2012 08:38
Как сделать блокирование на определенном сайте из списка запрещенных IP и из определенного списка рефералов ? DeDoK PHP 7 05.12.2011 03:46
как сделать сортировку для отрицательных элементов? Irisk Паскаль, Turbo Pascal, PascalABC.NET 6 23.12.2010 20:05
DBGrid: Как сделать собственную сортировку данных? AnTe БД в Delphi 17 26.02.2009 17:38
Как сделать сортировку (поиск) Delphi+Access Toska БД в Delphi 6 28.08.2008 22:32