weranda
@weranda

Как обработать большой массив данных с нужным форматированием?

Приветствую.
Имеется десять десять тысяч строк следующего формата:

В EXCEL:
1 параметр 1
1 параметр 2
1 параметр 3
2 параметр 4
2 параметр 5
3 параметр 6
3 параметр 7
3 параметр 8

Или в CSV:

1;параметр 1
1;параметр 2
1;параметр 3
2;параметр 4
2;параметр 5
3;параметр 6
3;параметр 7
3;параметр 8

Нужно привести эти данные в следующий вид в CSV(Excel):

1;параметр 1|параметр 2|параметр 3
2;параметр 4|параметр 5
3;параметр 6|параметр 7|параметр 8

Вопрос: Как это можно сделать? Уже весь мозг сломал, в скриптах не силен, в регулярках тоже. Подскажите пожалуйста, как максимально быстро и просто это можно реализовать?
  • Вопрос задан
  • 2921 просмотр
Решения вопроса 1
saboteur_kiev
@saboteur_kiev
software engineer
на перле

open(DATA,"data.csv");
$last="";
foreach $line ( ) {
chomp $line;
($id,$value)=split(";",$line);
if ($last==$id) { print "|$value"; }
else { $last=$id; print "\n$id;$value"; }
}

C:\test>perl.exe a.pl
1;параметр 1|параметр 2|параметр 3
2;параметр 4|параметр 5
3;параметр 6|параметр 7|параметр 8
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@M-ka
frontend присматривающийся к ror
эти данные же в файлах, а значит тут вообще жс не при делах...
1. надо писать скрипт на другом языке, который откроет файл, считает данные, поколбасит, создаст где то файл, запишет поток, сохранит изменения...
2. если это пара файлов, тогда уже можно копипастом заняться, что бы все строки запихнуть в переменную.
ну а строку с
1;параметр 1
1;параметр 2
1;параметр 3
сконвертить до состояния
1;p1|p2|p3 раз плюнуть в цикле
Сначала строку разбить на подстроки по переносу через split, в результате будет массив из строк.
Потом массив обойти в цикле. В процессе обхода строку можно разбить на 2 подстроки и снова через split по ";". Результат разбивания записать в какой то более глобальный обьект, в котором ключем будет в виде строки №, а в качестве параметра значение... вот только дописывать значение, а не заменять (аля x += доп параметр).
В результате у нас будет обьект типа
{
1: 'a|b|c' //при дописывании |, не ставить, если это только созадется
2: 'a|b|c'
}
Ну а после этого всего, объект представить в виде строки и делов то...
Вот тут подумал, оказалось и еще проще, потому убрал комментарий в отношении конвертации объекта в строку через ту стринг подобное ну и добавил следующее:
Обойти через фор ин объект... и формировать строку в следующем формате
ключь ";" значение (ну у нас же значение и так строка) перенос строки, в результате будет строка, которую тоже сохранить через x+= значение, а результат сохранить уже через копипаст в нужный файл или послать аяксом куда то в виде контента...
Вот только влезет ли при посте оно? Там же лимит.... Тут только постом думать
Ответ написан
Комментировать
@brud
специально для самых нежных и трепетных
регулярка сложноватая выйдет
думаю, проще и нагляднее будет, если разбить эти данные на массив, и в фориче смотреть первый символ
Ответ написан
Комментировать
@kirilldzr
AWK вам в помощь. Сам им пользовался для подобных задач.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы