Форум программистов, компьютерный форум, киберфорум
Perl
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/14: Рейтинг темы: голосов - 14, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 08.06.2010
Сообщений: 7

Как отсортировать по столбцу, где содержатся данные?

08.06.2010, 15:05. Показов 2990. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
подскажите как отсортировать по столбцу, где содержатся данные след. формата:

02:056.71
02:161.85
01:292.7
Perl
1
2
3
4
foreach $hash (sort ??? keys %hash) 
{ 
printf '%-10s',$keys;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.06.2010, 15:05
Ответы с готовыми решениями:

Как отсортировать данные в таблице, содержащей различные типы данных, по определенному столбцу?
Всем, добрый день. Вывернул уже себе весь мозг. Стоит задача отсортировать часть таблицы макросом. Ниже привожу эту часть ...

Отсортировать данные в DataTable по алфавиту по определенному столбцу
Каким образом можно это осуществить?

Как отсортировать массив по столбцу с датой (CDate)?
Не хочет никак 'цепляться' дата. VB 'видит' ее только как 'первые два символа' или как число...запятая...месяц, но это не дата, т.к. нужен...

11
0 / 0 / 1
Регистрация: 05.05.2010
Сообщений: 124
09.06.2010, 10:11
А как ты хочешь чтобы это было отсортировано?
0
0 / 0 / 0
Регистрация: 08.06.2010
Сообщений: 7
09.06.2010, 11:10  [ТС]
вопрос снят, все получилось
Perl
1
2
3
4
foreach $keys (sort {$a cmp $b} keys $hash)
 {
 
 }
0
0 / 0 / 0
Регистрация: 08.06.2010
Сообщений: 7
09.06.2010, 18:20  [ТС]
А еще по сортировке
есть hash
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
%hash = ('D2S1790','02:101.1',
        'D2S1399','02:161.4',
        'D1S468','02:058.71',
        'D2S1790','02:058.71',
        'PAH','02:058.71',
        'GATA124','01:146.3',
        'NRG848','18:098.8',
        'DXYS233','22:003.0',
        'BDNF','22:040.4',
        'ATA38A','22:068.8');
  
 
foreach $keys (sort ??? keys %hash)
  {
   printf '%-10s',$keys;
  }
нужно получить

ATA38A 22:068.8
BDNF 22:040.4
D1S468 02:058.71
D2S1790 02:058.71
D2S1399 02:161.4
DXYS233 22:003.0
GATA124 01:146.3
NRG848 18:098.8
PAH 02:058.71
т.е. сортировка должна происходить и по ключу и по значению

Perl
1
sort {$hash{a} cmp $hash{$b} && $a cmp $b }
не дает желаемого результата.
0
0 / 0 / 1
Регистрация: 05.05.2010
Сообщений: 124
09.06.2010, 18:32
Ну во-первых ты не правильно формируешь хэш, надо так
%hash=('key' =>'val', ....);
во -вторых, нельзя отсортировать сразу по 2 параметрам, это логическая ошибка.
0
0 / 0 / 0
Регистрация: 08.06.2010
Сообщений: 7
10.06.2010, 13:05  [ТС]
хэш я формирую, когда считываю данные с открытого файла. Это был как-бы маленький примерчик.
По поводу сортировки. как же быть? Сначала отсортировать по одному столбцу, сохранить во временный хэш, затем по второму?
0
0 / 0 / 1
Регистрация: 05.05.2010
Сообщений: 124
10.06.2010, 13:11
я не вижу смысла в этом? Тогда лучше сразу по 2-му отсортировать, результат будет тот же.
0
0 / 0 / 0
Регистрация: 08.06.2010
Сообщений: 7
10.06.2010, 14:59  [ТС]
ОК!
начну сначала.
есть несколько файлов, в которых находятся данные в табличной форме.
Столбец0 Столбец1 Столбец2 Столбец3
D12S1300 00:999.9 -999.90 0.000
D1S468 01:004.0 4.00 0.114
D1S1612 01:013.8 13.80 0.258
D1S1597 01:023.3 23.30 0.349
D1S3669 01:027.7 27.70 0.069

считывая каждый файл, необходимо получить исходный вариань в след. виде:
Столбец0 Столбец1 Столбец3 Столбец3 Столбец3 ...

причем, в Столбец0 много данных, начинающихся с D1 ,D2 ,D10
их надо
1. разместить на отдельных страницах ??? (как это делать?)
2. отсортировать каждые отдельно, т.е. D1 ,D2 ,D10
мой код:

Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/perl
use Cwd;
my $pfad = getcwd();
my %hash = ();
my $f_out = 'maxls.txt';
chdir ($pfad) || die 'Fehler1 ;$!';
opendir (DIR, '.');
@files=readdir(DIR);
closedir(DIR);
 
open (FILE_OUT, '>$pfad/$f_out') or die 'Fehler1,$!';
print FILE_OUT chr(27), chr(38), chr(108), chr(49), chr(79),'';   #указатель перевода стараницы на альбомный формат
foreach $files (@files)
 { 
 if ($files=~/.mls/i)
  {
    @markername = split(/./, $files);
    open (FILE_INP, '<$files') or die 'Fehler2,$!';
    while(my $line = <FILE_INP>)
      {
       chomp ($line);
       next if ($line eq '');
       next if($line =~/^TELOMER/ );
       my @daten = split(/s+/, $line);
       my ($sp_marker, $sp_position,$S,$sp_mls)=@daten;  
       $position{$sp_marker} = $sp_position;
       push @{$mls {$sp_marker}},$sp_mls;
     }
  }   
} 
 
  foreach $mark (sort {$position{$a} cmp $position{$b}} keys %position)
  {
    printf FILE_OUT '%-10s', $mark;
    printf FILE_OUT '%-10s', $position{$mark};
    foreach $i (0 .. (@{$mls{$mark}} - 1))
     {
       printf FILE_OUT '%7s',@{$mls{$mark}}[$i];    
     }
     print FILE_OUT '';
  }
0
0 / 0 / 1
Регистрация: 05.05.2010
Сообщений: 124
10.06.2010, 15:37
1. разместить на отдельных страницах ??? (как это делать?) -
Разместить на отдельных страницах где? В текстовых файлах нет понятия страниц. Можно разместить в разных файлах и именовать их в каком-то порядке. И еще разместить что на отдельных страницах? Данные этого столбца или данные по каждой строке? Не понятно.
2.. отсортировать каждые отдельно, т.е. D1 ,D2 ,D10 - ???
Как еще можно отсортировать? Не отдельно, сортировка подразумевает выстраивание либо в алфавитном порядке либо цифровом. все таки я не могу понять что нужно конкретно и для каких целей? Раскажи подробнее может есть способ проще сделать это.
И еще в коде одна ошибочка:
Perl
1
2
3
opendir (DIR, '.');
@files=readdir(DIR);
closedir(DIR);
лучше так:
Perl
1
2
3
opendir (DIR, '.');
@files=grep(!/^..?$/, readdir DIR);#Отфильтровываем родительский и текущие каталоги, т.е. .. и .
closedir(DIR);
0
0 / 0 / 0
Регистрация: 08.06.2010
Сообщений: 7
10.06.2010, 17:08  [ТС]
1. все данные должны быть сохранены в отдном текстовом файле.
по поводу отдельных страниц вопрос снимается.
2. имелось в виду, что данные д.б. в след. виде выведены:
WASBG WAB
D12S1300 00:999.9 0.000 0.000
D1S468 01:004.0 0.000 0.114
D1S1612 01:013.8 0.000 0.258

D2S2166 02:013.5 0.000 0.000
D2S1400 02:029.2 0.123 0.000
D2S1360 02:040.0 0.062 0.072

D3S2387 03:002.3 0.000 0.297
D3S3050 03:010.3 0.015 0.193
D3S4545 03:023.5 0.000 0.000
D3S1259 03:026.1 0.000 0.000

на данный момент мой код:
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/perl
use Cwd;
my $pfad = getcwd();
my %hash = ();
my $f_out = 'maxls.txt';
chdir ($pfad) || die 'Fehler1 ;$!';
my @files = <*.mls>;
open (FILE_OUT, '>$pfad/$f_out') or die 'Fehler1,$!';
print FILE_OUT chr(27), chr(38), chr(108), chr(49), chr(79),'
';   #Seite-orientation(Landscape)
foreach $files (@files)
 { 
    @markername = split(/./, $files);
    if($f[0] eq ''){ shift @daten;}
    ($markername1, $markername2)= @markername;
     if ( $markername1 =~/BUL_W_A/i){$spalte = 'WAB';}
     if ( $markername1 =~/SBG_W_A/i){$spalte = 'WASBG';}
     open (FILE_INP, '<$files') or die 'Fehler2,$!';
     while(chomp (my $line = <FILE_INP>))
      {
       next if ($line eq '');
       next if($line =~/^TELOMER/ );
       my ($sp_marker, $sp_position,$S,$sp_mls) = split(/s+/, $line);
       $position {' '}  = ' ';
       $position{$sp_marker} = $sp_position;
       push @{$mls {$sp_marker}},$sp_mls;
     }
       unshift @{$mls {' '}},$spalte;
 } 
  foreach $mark (sort {$position{$a} cmp $position{$b}} keys %position)
  {
    printf FILE_OUT '%-10s', $mark;
    printf FILE_OUT '%-10s', $position{$mark};
     foreach $i (0 .. (@{$mls{$mark}} - 1))
     {
       printf FILE_OUT '%7s',@{$mls{$mark}}[$i];    
     }
     print FILE_OUT '';
   }
в этом случае получаю результат:
WASBG WAB
D12S1300 00:999.9 0.000 0.000
D1S468 01:004.0 0.000 0.114
D1S1612 01:013.8 0.000 0.258
D1S1597 01:023.3 0.000 0.349
D1S3669 01:027.7 0.000 0.06
ATA38A 01:146.3 0.464 0.000
D1S1679 01:148.0 0.051 0.000
D1S1653 01:151.7 0.000 0.034 ...
во-первых почему-то у меня названия столбцов наоборот
во-вторых идет нормальная сортировка по столбцу1, но тогда по столбцу0 идет полная каша.
0
0 / 0 / 1
Регистрация: 05.05.2010
Сообщений: 124
10.06.2010, 18:15
Начну с конца:
Чтобы не было каши в 2-х столбцах, попробуй эти два столбца (строки в них) объединять в один перед самым выводом в файл и сортировать по этому уже объединенному значению (через join например объединяешь, а потом sort).
Второе:
Что значит наоборот названия столбцов? Разъясни.
0
0 / 0 / 0
Регистрация: 08.06.2010
Сообщений: 7
10.06.2010, 21:30  [ТС]
Это значит, что по идее идет считывание данных с файла BUL_W_A.mls (данные в столбце из него)и должно быть название столбца WAB, а пишет WASBG и наоборот
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.06.2010, 21:30
Помогаю со студенческими работами здесь

Как отсортировать двухмерный массив по определенному столбцу?
Привет всем. Возможно кто-нибудь подскажет, как отсортировать массив по убыванию состоящий из 4 строк и 5 столбцов не по последней...

Как в TListView привязать данные к определенному столбцу?
Всем привет. Вопрос в следующем. У меня есть таблица TListView, я иногда в Design меняю местами столбцы и при этом в самом коде...

Как реализовать таблицу, данные для заполнения которой содержатся в бд mssql
Какие образом можно реализовать заполнение связанными друг с другом данными, которые содержатся в 11 таблицах бд. В столбец слева должны...

Как отсортировать сразу же в запросе, по столбцу который в том же запросе и создаётся?
Дан запрос: SELECT .ФИО, .Группа, Отметки., Отметки.Полугодие, AVG(Отметки.Отметка) AS FROM, Отметки WHERE . = Отметки. AND...

Вывод БД в таблицу. Как отсортировать по определенному столбцу таблицу
Добрый день уважаемые Гуру. Подскажите пожалуйста как отсортировать таблицу по значению столбца 'Tel' ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru