Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отслеживании позиции в файле 
:(
    Опции темы
micolo
Дата 6.4.2007, 06:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 6.12.2006

Репутация: нет
Всего: нет



Доброго времени суток!
У меня такой вопрос!
Условно говоря нужно разделить каждую строчку в файле на позиции, по определённому количеству символов. При записи строк в файл - записывать таким образом, чтобы не смещалась общая структура. Например:

13123123   4234234        4564645
132123      34543             546546
32              6                     56
32323       45345435       65656




Как это можно реализовать?
PM MAIL   Вверх
chaos
Дата 6.4.2007, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 3
Всего: 44



на ум сразу приходит format
PM WWW   Вверх
micolo
Дата 6.4.2007, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 6.12.2006

Репутация: нет
Всего: нет



а можно какой нить примерчег....
PM MAIL   Вверх
amg
Дата 6.4.2007, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 9
Всего: 50



Если имеется в виду выравнивание столбцов, то вот один из вариантов. Запускать:
script.pl input.file > output.file
Код

use List::Util('max');

# Зачитываем таблицу из файла в двумерный массив
push @a, [split] while <>;

# Находим максимальные ширины столбцов
foreach $i (0..max(map {$#{$_}} @a)) {
  $max[$i] = max(map {defined && length} map {$_->[$i]} @a);
}

# Печатаем с выравниванием столбцов
foreach (@a) {
  $i = 0;
  foreach (@$_) {
    #print ' 'x($max[$i++]-length($_)), $_, ' '; # Выравнивание столбцов по правому краю
    print $_, ' 'x($max[$i++]-length($_)+1); # Выравнивание столбцов по левому краю
  }
  print "\n";
}


PM MAIL   Вверх
micolo
Дата 6.4.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 6.12.2006

Репутация: нет
Всего: нет



amg - спасибо большое.
PM MAIL   Вверх
Nab
Дата 6.4.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 3
Всего: 37



amg, я тебя уважаю, но плиз не изобретай велосипед smile

а вот chaos, дал вполне правильный ответ smile

Код

# при необходимости 
my @arr = ();
while (<>) { @arr = (@arr, split) };


# определяем формат
format STDOUT =
^<<<<<<<<<<<< ^<<<<<<<<<<<< ^<<<<<<<<<<<<
$a, $b, $c
.

# выводим
while (@arr) {($a, $b, $c, @arr) = @arr; write}


Код

# или так, если на вход они идут тройками :)
while (<>) {($a, $b, $c) = split; write}

А вообще, почтайте про format, очень полезная вещь...



--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
amg
Дата 7.4.2007, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 9
Всего: 50



Хе, эдак то, с фиксированной шириной столбцов, и printf справится.
Код

while (<>) {
  printf "%-10s", $_ for split;
  print "\n";
}

Хотя, в условии было сказано, что ширина столбца определенная, так что мой код выше явно избыточен. 

Тем не менее, задачу нахождения максимальной ширины каждого столбца в двумерном массиве считаю актуальной. Поэтому вынесу ка я ее в отдельную тему.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0437 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.