Программирование (регулярные выражения?)
Jun. 8th, 2012 10:55 am![[identity profile]](https://www.dreamwidth.org/img/silk/identity/openid.png)
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)
Добрый день,
Подскажите, пожалуйста, советом.
Есть серия данных, записанная в текстовом докуменет, в виде:
1 2
3 4.5
5 6
-7.1 8
9 10
11 -12
Другими словами в каждой строке по два значения, среди которых могут быть отрицательные и дробные, разделены они либо пробелом, либо последовательностью пробелов.
Как этой серии придать форму:
d1.push ([1, 2]);
d1.push ([3, 4.5]);
и т.д.?
Подскажите, пожалуйста, советом.
Есть серия данных, записанная в текстовом докуменет, в виде:
1 2
3 4.5
5 6
-7.1 8
9 10
11 -12
Другими словами в каждой строке по два значения, среди которых могут быть отрицательные и дробные, разделены они либо пробелом, либо последовательностью пробелов.
Как этой серии придать форму:
d1.push ([1, 2]);
d1.push ([3, 4.5]);
и т.д.?
no subject
Date: 2012-06-08 09:02 am (UTC)Для винды будет проще всего, имхо, открыть этот документ в Экселе, используя как разделитель пробел (предварительно в любом текстовом редакторе заменив итеративно 2 пробела на один). После чего в третьей колонке сделать формулу типа = d1.push ([A1, B1]};
Для никсов: sed или awp, что вам больше нравится.
no subject
Date: 2012-06-08 09:10 am (UTC)А в третью колонку как вбить формулу? она же в текстовом виде воспримется?
no subject
Date: 2012-06-08 09:16 am (UTC)=CONCATENATE("d1.push([";A1;",";B1;"])")
Вставьте в первую строку третьей колонки, потом заполните вниз, потянув вниз мышкой за выделенный угол этой ячейки.
no subject
Date: 2012-06-08 09:30 am (UTC)Но эксель всё же полез использовать. Получилось так:
For i = 2 To 2500
Cells(i, 3) = "d1.push([" & Cells(i, 1) & "," & Cells(i, 2) & "]);"
Next
Подозреваю, что ваш метод будет работать быстрее:).
no subject
Date: 2012-06-08 09:02 am (UTC)Каждую строку разобрать выражением /\s*(\S+)\s+(\S+)\s*/
UPD: если задача не является учебной типа "использовать регулярные выражения для...", то большинство языков позволяют такие данные из файла считать стандартными функциями и регулярки здесь не нужны :)
no subject
Date: 2012-06-08 09:09 am (UTC)Задача не учебная, нужно просто каким угодно образом придать данным указанный вид, чтобы потом можно было скопировать в код.
Explode - это приложение? Дело в том, что данные уже в строках. Или я не понял что-то?
no subject
Date: 2012-06-08 09:21 am (UTC)explode - это функция в ряде языков, позволяющая разбивать строку на подстроки по указанному разделителю.
no subject
Date: 2012-06-08 09:15 am (UTC)$ cat 1.txt
1 2
3 4.5
5 6
-7.1 8
9 10
11 -12
$ cat 1.txt | awk '{ print "d1.push([",$1,",",$2,"]);"; }'
d1.push([ 1 , 2 ]);
d1.push([ 3 , 4.5 ]);
d1.push([ 5 , 6 ]);
d1.push([ -7.1 , 8 ]);
d1.push([ 9 , 10 ]);
d1.push([ 11 , -12 ]);
no subject
Date: 2012-06-08 09:17 am (UTC)Если я правильно понял, то вначале вы выводите содержимое текстового документа?
А затем? Вы могли бы объяснить эту строчку 1.txt | awk '{ print "d1.push([",$1,",",$2,"]);"; }'?
no subject
Date: 2012-06-08 09:21 am (UTC)Затем исходные данные из файла я перенаправляю утилите awk, которая берет первое и второе число в строке, и дописывает нужные строковые данные.
no subject
Date: 2012-06-08 10:59 am (UTC)В других системах она сразу есть.
no subject
Date: 2012-06-08 09:15 am (UTC)no subject
Date: 2012-06-08 09:18 am (UTC)Вы могли бы пояснить что это значит?
no subject
Date: 2012-06-08 09:22 am (UTC)$a = file ("text.txt");
foreach ($a as $k=>$v) {
list ($d1, $d2) = split (' ', $v);
echo "d1.push ([$d1, $d2]);\n";
}
no subject
Date: 2012-06-08 10:55 am (UTC)Данный файл оно обработает неверно
no subject
Date: 2012-06-08 10:57 am (UTC)no subject
Date: 2012-06-11 08:33 pm (UTC)Ctrl+h; Найти:" ";Заменить:" " (без кавычек) нажимать кнопку "Заменить все" пока не станет писать "Произведено замен: 0"
Найти:"^p";Заменить:"]);^pd1.push ([" (без кавычек) нажать кнопку "Заменить все" один раз
допилить первую и последнюю строку