2016-02-24 2 views
3

У меня нет навыков программирования, но очень специфическая задача: мне нужно разбить один массивный текстовый файл на многие, разделив их на определенный текстовый указатель (@) , Я решил попробовать сценарий Powershell для этого.Powershell: создать несколько .txt из одного .txt с именами файлов из строки

До сих пор, вот что я придумал:

InputFile = "c:\test.txt" 
$Reader = New-Object System.IO.StreamReader($InputFile) 
$a = 1 
While (($Line = $Reader.ReadLine()) -ne $null) { 
    If ($Line -match "@") { 
     $OutputFile = "c:\splittedfile$a.txt" 
     $a++ 
    }  
    Add-Content $OutputFile $Line 
} 

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

Редактировать @Jason Boyd: Определение структуры файла, основанный на комментарии Джейсона: Это в основном большой шаблон для вики, поэтому в результате TextFiles должен иметь конкретные имена (в первом примере «буэнос aires_audiencia_rpl ». количество строк не является постоянным, так как„Comentario“могут быть предварительно заполнены и имеют разрывы строк

@ 
buenos aires_audiencia_rpl 
======= Buenos Aires, Audiencia (RPL) ======= 
^Variantes | | 
===== Comentario ===== 

==== Geografía ==== 
==== Historia institucional ==== 
==== Población y economía ==== 
==== Iglesia ==== 
==== Bibliografia ==== 
==== Citas textuales ==== 
@ 
caracas_audiencia_ven 
+0

можете ли вы описать ваш текст немного больше? Или майб e включите небольшую выборку файла в свой вопрос. Есть один '@' на строку. Я не уверен, что вы имеете в виду, когда говорите, что вторая строка должна действовать как имя файла. Вы имеете в виду текст после того, как '@' должен быть именем файла? Если это так, когда заканчивается имя файла и начинается текст для следующего файла? –

ответ

3

вы можете прочитать еще одну линию, как только ваше состояние матчей:.

While (($Line = $Reader.ReadLine()) -ne $null) { 
    If ($Line -match "@") { 
     $OutputFile = $Reader.ReadLine() 
     Add-Content $OutputFile $Line 
     $Line = $OutputFile 
     $a++ 
    }  
    Add-Content $OutputFile $Line 
} 
+0

@Wernazuma отредактируйте эту информацию на ваш вопрос, а затем @ упомяните Джейсона в комментарии к вашему вопросу, а не комментарий по этому вопросу. После этого он получит уведомление. – briantist

+0

Хорошо, я понял, спасибо. – Wernazuma

+0

Wohoo, он решен. И мне даже приходилось думать о себе с вашего вклада, и это здорово, так как это означает, что я получил хотя бы НЕКОТОРЫЕ, даже очень неудобные, понимание того, как это работает. Ниже $ Line = $ OutputFile я просто добавил $ OutputFile = "c: \ Textfile \ $ Line.txt". Теперь мне нужно только выяснить, как удалить новую первую строку, так как я не хочу, чтобы имена файлов оставались в строке 1 новых файлов. – Wernazuma

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