Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: преобразовать текстовый документ  (Прочитано 2912 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн gurza_linux

  • Автор темы
  • Любитель
  • *
  • Сообщений: 75
  • гюрза
    • Просмотр профиля
привет всем,
есть текстовый документ (utf-8 unicode text). в этом текстовом документе количество символов в каждой строке одинаково - 40.
возникла необходимость преобразовать текст таким образом, чтобы количество символов в одной строке было не 40, а 100,
при этом сохранилась бы удобочитаемость текста.
гугление выдает исключительно виндовые программы по разбивке текстовых файлов на несколько более маленьких.

как можно решить такую задачу?
« Последнее редактирование: 15 Марта 2011, 14:17:35 от gurza_linux »
macbook pro
win7\ubuntu 12.10\mac os x 10.8.X
intel core i7, hdd 750 gb, ram 16 gb, video 1 gb

Оффлайн apl

  • Активист
  • *
  • Сообщений: 689
  • Calculate linux
    • Просмотр профиля
    • Атеисты и безбожники
Re: преобразовать текстовый документ
« Ответ #1 : 15 Марта 2011, 14:47:43 »
как можно решить такую задачу?

Такую задачу можно решить написанием скрипта.
Core2Duo 6600, 4Gb RAM, 1000Gb HDD, Nvidia GeForce 8800 GTS, Calculate linux

Оффлайн gurza_linux

  • Автор темы
  • Любитель
  • *
  • Сообщений: 75
  • гюрза
    • Просмотр профиля
Re: преобразовать текстовый документ
« Ответ #2 : 15 Марта 2011, 14:58:42 »
как можно решить такую задачу?

Такую задачу можно решить написанием скрипта.

это я и так допер. не особо силен в программировании, думаю, что следует использовать perl и его регулярные выражения.
сейчас читаю учебник по perl раздел работа с текстовыми файлами.

ход мыслей пока что вот такой:
1. читаем текст посимвольно.
2. убираем символ конца строки и символ перехода на другую строку - грубо говоря получаем текстовый документ с очень длинной строкой.
3. читаем уже преобразованный текст, также посимвольно, но после каждого сотого символа вставляем символ конца строки и символ перехода на другую строку.

эксперты, такой подход правильный?
« Последнее редактирование: 15 Марта 2011, 15:17:42 от gurza_linux »
macbook pro
win7\ubuntu 12.10\mac os x 10.8.X
intel core i7, hdd 750 gb, ram 16 gb, video 1 gb

Оффлайн apl

  • Активист
  • *
  • Сообщений: 689
  • Calculate linux
    • Просмотр профиля
    • Атеисты и безбожники
Re: преобразовать текстовый документ
« Ответ #3 : 15 Марта 2011, 15:12:46 »
Ну а в чем тогда вопрос? :)
Если будут вопросы конкретно по perl'у - пишите. Я на нем пишу давно...
Core2Duo 6600, 4Gb RAM, 1000Gb HDD, Nvidia GeForce 8800 GTS, Calculate linux

Оффлайн yorik1984

  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 1592
  • Кто не хочет, ищет причины
    • Просмотр профиля
Re: преобразовать текстовый документ
« Ответ #4 : 15 Марта 2011, 15:14:59 »
Ну а в чем тогда вопрос? :)
Если будут вопросы конкретно по perl'у - пишите. Я на нем пишу давно...
а помочь? скриптик сбацать?

Оффлайн apl

  • Активист
  • *
  • Сообщений: 689
  • Calculate linux
    • Просмотр профиля
    • Атеисты и безбожники
Re: преобразовать текстовый документ
« Ответ #5 : 15 Марта 2011, 15:18:21 »
Некогда. И так на работе скрипты пишу целыми днями.
Core2Duo 6600, 4Gb RAM, 1000Gb HDD, Nvidia GeForce 8800 GTS, Calculate linux

Оффлайн gurza_linux

  • Автор темы
  • Любитель
  • *
  • Сообщений: 75
  • гюрза
    • Просмотр профиля
Re: преобразовать текстовый документ
« Ответ #6 : 15 Марта 2011, 15:19:19 »
Ну а в чем тогда вопрос? :)
Если будут вопросы конкретно по perl'у - пишите. Я на нем пишу давно...
а помочь? скриптик сбацать?

скриптик сбацать не требуется.
я выше описал то, что пришло в голову. оцените, поправьте, посоветуйте.
я пока только учусь.
macbook pro
win7\ubuntu 12.10\mac os x 10.8.X
intel core i7, hdd 750 gb, ram 16 gb, video 1 gb

Оффлайн yorik1984

  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 1592
  • Кто не хочет, ищет причины
    • Просмотр профиля
Re: преобразовать текстовый документ
« Ответ #7 : 15 Марта 2011, 15:29:08 »
Есть проблемы... если убрать символ окончания строки и перехода на другую, то слова сольются в одно целое.(последнее предыдущей строки и первое новой.) Если в тексте отсутствуют переносы, то надо символ окончания строки заменить на пробел.
Цитировать
символ конца строки и символ перехода на другую строку
мне кажется это один и тот же символ, а не два.
Алгоритм следующий.
1. Включаем счетчик для подсчета количества символом.
2. Считываем символы пока не будет окончанием строки. заменяем на пробел.
3. Когда счетчик дойдет до 100(при каждом новом символе увеличивается на 1), то вставляем в текст символ окончания строки. сбрасываем счетчик до 1

 

Оффлайн apl

  • Активист
  • *
  • Сообщений: 689
  • Calculate linux
    • Просмотр профиля
    • Атеисты и безбожники
Re: преобразовать текстовый документ
« Ответ #8 : 15 Марта 2011, 15:30:57 »
1. читаем текст посимвольно.
2. убираем символ конца строки и символ перехода на другую строку - грубо говоря получаем текстовый документ с очень длинной строкой.
3. читаем уже преобразованный текст, также посимвольно, но после каждого сотого символа вставляем символ конца строки и символ перехода на другую строку.

1. Читаем в строку ВЕСЬ файл. При чем тут посимвольно?
if( -e $filename && open (TEMP, "$filename") ) {
binmode TEMP;
$data = <TEMP>;
close(TEMP);
}

2. Не убираем, а заменяем на пробел, ибо может быть однослово
другое слово
без каких-либо символов между ними кроме
 или

$data =~ s/[
]/ /g;

3. Далее нужно разбить текст на строки по 100 символов. Чтобы сделать хорошо нужно разбить текст на слова, подсчитать число слов чтобы уместилось в 100 символов, объединить слова и выровнять строку пробелами чтобы оканчивалась всегда в 100ой позиции. записать строку и вычислять следующую


Пользователь решил продолжить мысль 15 Марта 2011, 15:41:55:
Ладно... щас дам скриптик
« Последнее редактирование: 15 Марта 2011, 15:41:55 от apl »
Core2Duo 6600, 4Gb RAM, 1000Gb HDD, Nvidia GeForce 8800 GTS, Calculate linux

Оффлайн gurza_linux

  • Автор темы
  • Любитель
  • *
  • Сообщений: 75
  • гюрза
    • Просмотр профиля
Re: преобразовать текстовый документ
« Ответ #9 : 15 Марта 2011, 15:42:25 »
всем спасибо за советы,
сегодня вечером обязательно попробую.
macbook pro
win7\ubuntu 12.10\mac os x 10.8.X
intel core i7, hdd 750 gb, ram 16 gb, video 1 gb

Оффлайн apl

  • Активист
  • *
  • Сообщений: 689
  • Calculate linux
    • Просмотр профиля
    • Атеисты и безбожники
Re: преобразовать текстовый документ
« Ответ #10 : 15 Марта 2011, 16:23:02 »
Вот тебе text.pl

#!/usr/bin/perl
use strict;

use locale;
use POSIX qw (locale_h);
setlocale(LC_CTYPE, 'ru_RU.utf8');
setlocale(LC_ALL, 'ru_RU.utf8');

use utf8;
no warnings "utf8";
use Encode qw/decode/;
binmode STDOUT, ':utf8';

my $i = $ARGV[0];
my $o = $ARGV[1];

if ( !length $i || !-f $i || !length $o ) {
print "\n\nUsage: text.pl <input file> <output file>\n\n";
exit;
}

my $text = '';
if( -f $i && open (TEMP, "$i") ) {
binmode TEMP;
my @text = <TEMP>;
$text = join "\n", @text;
close TEMP;
} else {
print "\n\nFile $i not found!\n\n";
exit;
}

$text =~ s/([\n\r]){1,}/ /g;
my @words = split /s/, $text;
my ( $line, $out, $cur, $i );

my $ii = 0;
foreach $cur ( @words ) {
if ( !Encode::is_utf8($cur) ) {  $cur = Encode::decode("utf8", $cur); }
if ( length "$line $cur" > 100 ) {
$line =~ s/^s{1,}//;
$line =~ s/s{1,}$//;
$out .= "\n$line";
$line = $cur;
} else {
$line = "$line $cur";
}
}
$out .= "\n$line";

if( open (TEMP, "> $o ") ) {
binmode TEMP;
print TEMP "$out";
close TEMP;
} else {
print "\n\nFile $o not found!\n\n";
exit;
}

Пользователь решил продолжить мысль 15 Марта 2011, 16:27:18:
Некогда было сильно заморачиваться...

Проблемы:

1. Строки он НЕ выравнивает. Т.е они будут разной длины, но не более 100
2. Если в тексте есть короткая строка, например заголовок, то она будет воспринята как любой другой кусок текста.
« Последнее редактирование: 15 Марта 2011, 18:59:07 от apl »
Core2Duo 6600, 4Gb RAM, 1000Gb HDD, Nvidia GeForce 8800 GTS, Calculate linux

Оффлайн oleksandr1

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: преобразовать текстовый документ
« Ответ #11 : 15 Мая 2011, 16:34:53 »
Привет, с программированием не знаком, но очень нуждаюсь в скрипте по преобразованию текста в строчки одинаковой длины. На конце строки выравнивание за счет пробелов до небходимого значения. И добавляется в конце строки ссылка на картинку. То есть картинки будут расположены строго вертикально под собой.
Шрифт может быть  моноширный.  Кто посоветует как сделать? Возможна оплата.
Может какая то программа это умеет делать?

andrey_p

  • Гость
Re: преобразовать текстовый документ
« Ответ #12 : 15 Мая 2011, 16:46:39 »
Для чего надо? Если для НТМЛ - то надо CSS использовать. Если нет, то для чего и в каком виде должны быть ссылки на картинки?  ???

ЗЫ Честно говоря, не понял, что требуется. Можно пример входного текста и что, должно получится на выходе?
« Последнее редактирование: 15 Мая 2011, 16:48:19 от andrey_p »

Оффлайн oleksandr1

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: преобразовать текстовый документ
« Ответ #13 : 15 Мая 2011, 17:34:38 »
Стили не подходит использовать. В конце строчки должен добавляться графический элемент типа вафикона. Или знак например #
Пример:
Jaguar delivered one of the surprises of the 2010      #
Paris motor show with the new C-X75 super             #
concept car. The C-X75 is designed to showcase       #

Надеюсь, смысл понятен.
Наверное это надо делать в несколько этапов
1. Разбивка текста на строки с сохранением абзацев. То есть, один абзац - одна строка.
2. Разбивка на строки, с сохранением целостности слов и кол. знаков < 300 (например)
3. Добавление пробелов на конец строки до кол. знаков = 300
4. Добавление на конец каждой строки нужного элемента.

Имхо, с програмированием не знаком поэтому последовательность и т.д. может быть другая.
Пытаюсь объяснить  что на входе и что должно получится на выходе.
Желательно добавление нужного элемента из отдельного текстового документа рандомно или по списку

Оффлайн Jack Sparrow

  • Активист
  • *
  • Сообщений: 641
    • Просмотр профиля
Re: преобразовать текстовый документ
« Ответ #14 : 15 Мая 2011, 17:47:42 »
привет всем,
есть текстовый документ (utf-8 unicode text). в этом текстовом документе количество символов в каждой строке одинаково - 40.
возникла необходимость преобразовать текст таким образом, чтобы количество символов в одной строке было не 40, а 100,
при этом сохранилась бы удобочитаемость текста.
гугление выдает исключительно виндовые программы по разбивке текстовых файлов на несколько более маленьких.

как можно решить такую задачу?
Для простых случаев (если нет символов переноса и после каждой 40-й строки не стоит символ новой строки:
fold -sw 100 file.txt
Linux is only free if your time has no value (c) Jamie Zawinski

 

Страница сгенерирована за 0.053 секунд. Запросов: 24.