open (F,"text.txt");
my @fil=<F>;
close F;Надо полученный массив разбить на n равных частей.
При этом в каждой части слово не должно рваться.
>open (F,"text.txt");
>my @fil=<F>;
>close F;
>
>Надо полученный массив разбить на n равных частей.
>При этом в каждой части слово не должно рваться.Ничего не понятно из условия.
Слова в файле как записаны?
А если массив будет из n+1 элемента?
>>open (F,"text.txt");
>>my @fil=<F>;
>>close F;
>>
>>Надо полученный массив разбить на n равных частей.
>>При этом в каждой части слово не должно рваться.
>
>Ничего не понятно из условия.
>
>Слова в файле как записаны?
>А если массив будет из n+1 элемента?
>>open (F,"text.txt");
>>my @fil=<F>;
>>close F;
>>
>>Надо полученный массив разбить на n равных частей.
>>При этом в каждой части слово не должно рваться.
>
>Ничего не понятно из условия.
>
>Слова в файле как записаны?
>А если массив будет из n+1 элемента?
Сначала надо посчитать кол-во слов в массиве,
затем кол-во разелить на n, и каждую часть
запихнуть в новый массив или хеш.
>>>open (F,"text.txt");
>>>my @fil=<F>;
>>>close F;
>>>
>>>Надо полученный массив разбить на n равных частей.
>>>При этом в каждой части слово не должно рваться.
>>
>>Ничего не понятно из условия.
>>
>>Слова в файле как записаны?
>>А если массив будет из n+1 элемента?
>Сначала надо посчитать кол-во слов в массиве,
>затем кол-во разелить на n, и каждую часть
>запихнуть в новый массив или хеш.Допустим в файле 13 слов, а массив должен быть из N = 10.
Какое тут разбиение должно быть?
Можно ведь тупо сделать в первые 9 элементов по одному слову а в 10-ый остальные 4 :)
>>>>open (F,"text.txt");
>>>>my @fil=<F>;
>>>>close F;
>>>>
>>>>Надо полученный массив разбить на n равных частей.
>>>>При этом в каждой части слово не должно рваться.
>>>
>>>Ничего не понятно из условия.
>>>
>>>Слова в файле как записаны?
>>>А если массив будет из n+1 элемента?
>>Сначала надо посчитать кол-во слов в массиве,
>>затем кол-во разелить на n, и каждую часть
>>запихнуть в новый массив или хеш.
>
>Допустим в файле 13 слов, а массив должен быть из N =
>10.
>Какое тут разбиение должно быть?
>Можно ведь тупо сделать в первые 9 элементов по одному слову а
>в 10-ый остальные 4 :)
Так и хочу. :-)
В реальности будет от 2000 до 4000 слов, и надо разбить
на 2, или 3 или 5 массива.
При этом слова нельзя рвать. Я сделал, но сова рвуться.use locale;
my ($out_text,$popravka,$stop_len);
my $columns = 75;
my $td = 3;
my $widthtd = int 100/$td+.9;
my $maxlen = 3410;
my $pp = "<p class='par'>";
my $alltext = qq~ ...<a href="/?action=viewtext&id=23" target="win">весь текст</a>~;
my $alltextlen = length $alltext;
open (FILE,"statia.txt") or die ("Error:$!");
while (<FILE>) {
chomp;
$i++;
unless (length) {$_ = "Ўь" };
next unless length;
$txt .= "$_ ";
my @dat = split(/ /,$_);
for (my $j=0; $j <=@dat; $j++) {
$self{$i}{$j} = $dat[$j];
# $self{$i+$j} = $dat[$j];
# push (@txt0,$dat[$j]);
}
}
close FILE;
$txt =~ s/Ўь Ўь//g;
$txt = "Ўь$txt";
my $len = $alltextlen + length $txt;my $koeff = ($len/$td)+1;
for (my $j=0; $j <$td; $j++) {
$text = substr $txt, $koeff*$j, $koeff;
$text =~ /(.)$/i; $rex = $1;
$text =~ s/Ўь/$pp/g;
print qq~\t<TD valign="top" width="$widthtd%">$text$popravka</TD>\n~;
}
undef $txt; undef $text;
if ($len > $maxlen) {
# $out_text = substr("$out_text",0,$maxlen);
# $out_text = qq~$out_text $alltext~;
# $len = $maxlen;
}print qq~
<style type="text/css">
<!--
TABLE.text TD { font:normal normal 9pt Arial,Verdana,sans-serif; text-align:justify; }
P.par { text-indent:1em; text-align:justify; margin-top:2pt; }
-->
</style>
<TABLE width="70%" class="text" border="0" cellspacing="16" cellpadding="0">
<TR>
$out_text
</TR>
</TABLE>
~;
Привет!Допустим у нас есть уже готовый массив слов, длина массива N
@word_array = qw{w1 w2 w3 ... wN};Есть массив
@dest_array = ();
длиной M < N, каждый элемент которого является массивом строк.Допустим что N = M*k + O; где O < M; k > 0;
Тогда
$dest_array[i] = {$word_array[i*M], $word_array[i*M+1], ..., $word_array[i*M+M-1]}
Осталось O последних элементов и массива @word_array.
Вот их всех можно засунуть в последний элемент массива @dest_array
>>Допустим в файле 13 слов, а массив должен быть из N =
>>10.
>>Какое тут разбиение должно быть?
>>Можно ведь тупо сделать в первые 9 элементов по одному слову а
>>в 10-ый остальные 4 :)
>Так и хочу. :-)
>В реальности будет от 2000 до 4000 слов, и надо разбить
>на 2, или 3 или 5 массива.
>При этом слова нельзя рвать. Я сделал, но сова рвуться.Можно вот так. Конечно, это только наброски. В принципе, можно попробовать обойтись одним регекспом без цикла. Но лень.
use locale;
open (F,"text.txt");
my @fil=<F>;
close F;my $n = 3; # количество частей
chomp @fil;
$_ = join " ", @fil; # весь текст одной строкой
my $cnt = int(s/(\w)\b/$1/g/$n); # количество слов в одной части
my @result;
s/((?:\w+\s*){$cnt})//, push @result, $1 while --$n;
push @result, $_;
Даа ... я Perl настолько не знаю.
>Даа ... я Perl настолько не знаю.Да здесь все просто :)
use locale;
open (F,"text.txt");
my @fil=<F>;
close F;my $n = 3; # количество частей
chomp @fil;
$_ = join " ", @fil; # весь текст одной строкой
my $cnt = s/(\w)\b/$1/g; # количество замен последнего символа каждого слова. т.е количество слов
$cnt = int($cnt/$n); # количество слов в одной части
my @result;
while ( --$n ) { # обработаем $n-1 частей, в каждой части $cnt слов
s/((?:\w+\s*){$cnt})//; # найти $cnt слов и убрать их из строки
push @result, $1 ; # найденное в результирующий массив
}
push @result, $_; # туда же остаток
еще проще, наверное, для понимания и реализации будет создать массив со словами
my @words;
push @words, split " ", $_ for @fil;и играться с этим массивом.