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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2018, 09:10   #1
кабанискус
Новичок
Джуниор
 
Регистрация: 15.03.2016
Сообщений: 1
Восклицание Сортировка в тхт файле

Здравствуйте! Надеюсь на вашу помощь.
В тхт файле имеется набор координат х:у (срока:столбец) вроде:
1:4,1:5,1:6,1:7,1:8,1:9,3:3,3:5,3:6 ,3:7,3:8,5:4,5:5,5:6,5:7,5:8,7:3,7: 4,
необходимо отсортировать таким образом, чтобы получить их в таком виде:
1:9, 3:8, 5:8, 7:4
Это есть координаты всех черных пикселей бмп. Пробовал выписывать х и у в разные тхт файлы по отдельности, но ничего хорошего не получил. Еще в мыслях крутится выписывать сначала все числа до двоеточия, а затем после и затем как-то уже в один тхт их скомпановать, но не могу сообразить как это реализовать.
кабанискус вне форума Ответить с цитированием
Старый 07.09.2018, 10:10   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Без файлов просто строка --> строка
Код:
r:=TStringList.Create;
r.Delimiter:=',';
r.DelimiterText:='1:4;1:5,1:6;..................';

res:='';
s:='';
for j:=0 to r.count-1 do begin
  if s='' then begin 
    s:=trim(r.strings[j]);
    s:=copy(s,1, pos(':',s));
  end;
  x:=trim(r.strins[j]); 
  if copy(x,1, pos(':',x)) =s then continue;
  // здесь x это то-то нам нужно
  res:=res+x; //собираем строку ответов
  s:='';
end;
if s<>'' then res:=res+x;
писал в блокноте, НЕ проверял
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 07.09.2018 в 10:28.
evg_m вне форума Ответить с цитированием
Старый 07.09.2018, 10:13   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
function MyCompare(List: TStringList; Index1, Index2: Integer): Integer;
var i,x1,x2,y1,y2: Integer;
begin
  i:=Pos(':',List.Strings[Index1]);
  x1:=StrToInt(Copy(List.Strings[Index1],1,i-1));
  y1:=StrToInt(Copy(List.Strings[Index1],i+1,Length(List.Strings[Index1])));
  i:=Pos(':',List.Strings[Index2]);
  x2:=StrToInt(Copy(List.Strings[Index2],1,i-1));
  y2:=StrToInt(Copy(List.Strings[Index2],i+1,Length(List.Strings[Index2])));
  if x1<x2 then Result:=-1
  else if x1>x2 then Result:=1
  else if y1<y2 then Result:=1
  else if y1>y2 then Result:=-1
  else Result:=0;
end;

procedure TForm1.Button2Click(Sender: TObject);
var s: TStringList;
    i,j,k: Integer;
begin
  s:=TStringList.Create;
  s.LoadFromFile('d:\1.txt');
  s.Delimiter:=',';
  s.DelimitedText:=s.Text;
  s.CustomSort(MyCompare);
  k:=-1;
  for i:=0 to s.Count-1 do begin
    j:=Pos(':',s.Strings[i]);
    if StrToInt(Copy(s.Strings[i],1,j-1))<>k then begin
      Memo1.Lines.Add(s.Strings[i]);
      k:=StrToInt(Copy(s.Strings[i],1,j-1));
    end;
  end;
  s.Free;
end;
В d:\1.txt
Код:
1:4,1:5,1:6,1:7,1:8,1:9,3:3,3:5,3:6,3:7,3:8,5:4,5:5,5:6,5:7,5:8,7:3,7:4...
без всяких пробелов и прочей лабуды. Результат в мемо
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
есть некоторый файл тхт, в котором находится 10 чисел. Задача: найти НОД этих чисел и записать его в другой тхт файл. Rezanans Помощь студентам 1 22.10.2017 21:38
Любопытная сортировка в файле pascaluser Паскаль, Turbo Pascal, PascalABC.NET 3 22.09.2012 12:55
Сортировка в файле (C) Dragonqc Помощь студентам 0 01.03.2012 02:37
Сортировка в файле Надежда1286 Помощь студентам 3 27.11.2011 16:26
Написать программу, преобразующую файл АВС.ТХТ в файл 123.ТХТ [Паскаль] Djoker Помощь студентам 1 12.12.2010 19:45