2013-12-19 4 views
0

У меня есть скрипт Perl, который я использую для создания файла.Как использовать Perl для подсчета конкретных символов в строке

У меня есть переменная, которая содержит несколько путей к файлу, разделенных запятыми.

path/to/file1,path/to/file2....path/tofileN 

В зависимости от того, как много путей файлов возвращаются, мне нужно создать еще одну строку, которая создает случайные строки, в соответствии с каждым файлом до N файлов

Если моя первая переменная строка содержит 3 пути к файлам, Мне нужно создать строку, такую ​​как

RandomName1,RandomName2,RandomName3 

и записать его в выходной файл.

  • Как я могу проанализировать входящую строку пути к файлу, чтобы определить, сколько всего путей файла в целом?

  • Как написать цикл для создания имени файла для каждого входящего пути файла, до N файлов?

+1

для 1, вы, вероятно, ищете [split] (http://perldoc.perl.org/functions/split.html) –

+0

У меня такое чувство, что нужно задавать более фундаментальный вопрос. Я ответил на это за вас, но я предлагаю вам сделать шаг назад и подумать о том, какую проблему вы действительно хотите решить. Это может сэкономить вам много работы позже. – simbabque

+1

Пожалуйста, объясните предпосылки для вашего вопроса, чтобы мы могли понять, что вам нужно делать. Создание списка случайных строк никогда не бывает полезным. Вы описали, откуда взялись данные, но вы должны объяснить намного больше о том, что вы делаете с этими файловыми путями, и какие части должны быть случайными. – Borodin

ответ

0

Для 1), вы, вероятно, захотите split, как сказал RC. Для 2) File::Temp должен сделать трюк.

use File::Temp 'tempfile'; 

my $orig_path_str = 'path/to/file1,path/to/file2....path/tofileN'; 
@orig_paths = split(/,/, $orig_path_str); 

my @random_paths; 
# loops number of times equalling your number of paths 
foreach (1..scalar(@orig_paths)) { 
    my ($fh, $filename) = tempfile(); 
    push(@random_paths, $filename); 
} 
my $random_path_str = join(',', @random_paths); 
+1

'tempfile' также создаст файл на диске, но ОП попросит создать случайные имена. Неясно, есть ли у него письменные разрешения. Если нет, это не удастся. – simbabque

+0

А, да. Я неправильно понял вопрос о том, что случайные имена будут самими файлами. Пойдите с ответом simbabque. –

+0

Как мой комментарий к отвечу Симбабке, разве это не дикое предположение о том, что может понадобиться OP? – Borodin

2

Я не совсем понимаю, почему вы бы поместили список имен в отдельную строку, но здесь мы идем.

use strict; 
use warnings; 

sub create_random_name { 
    # return a random filename 
} 

my $foo = '/home/foo,/root,/dev/null'; 
my @filenames; 

foreach (split ',', $foo) { 
    push @filenames, create_random_name(); 
} 

print join ',', @filenames; 

__END__ 
    efe277fe7aa54f7231dedef7ac8c1e3a,327f56cff4bd21b03ee3ceaa4280014c,7f1ca3feb3b51f7a9ee84f08b1791785 

Давайте посмотрим.

  • Я создал sub create_random_name, который должен возвращать некоторую случайность. Не уточняя, что вам нужно, я оставлю это из ответа.
  • We split Ваша строка путей в массив, но так как вы не хотите их, мы только просматриваем результаты. По этой же причине нет my $bar в foreach.
  • Мы хотим создать только имя_события для того же количества файлов, что и пути. Они помещаются в @filenames,
  • , который мы затем join на ,, чтобы они выглядели так же, как наша отправная точка, список в $foo.
+0

Вы действительно думаете, что это полезный ответ? Я думаю, что вы (никто) не установили реальное требование – Borodin

+0

@Borodin: Не могли бы вы уточнить этот комментарий? Я не уверен, что понимаю. Я знаю, что ФП хочет звучать странно. Вот почему я указал на это в комментарии по этому вопросу. Я также отметил, что то, что возвращает моя функция имени файла, - это просто случайный материал. – simbabque

+0

В ФП четко сказано, что он хочет. Создайте строку, разделенную на кома, с заданным количеством новых случайных имен файлов. Число исходит из определения того, сколько путей находится в первой строке, которую он уже знает, но не знает, как анализировать. Я думаю, это ясно. Я не знаю, почему он хотел бы делать все, что захочет. На самом деле, я думал, что вопрос был довольно хорошо описан, хотя у него не было кода. – simbabque

Смежные вопросы