2012-03-15 2 views
0

Добрый день,Создайте несколько текстовых файлов из одного текстового файла с определенными именами файлов

Я ищу код, который поможет мне не тратить на это 3 недели. Я не знаю, как кодировать, и просто выяснить, как использовать такой код будет весело. :) Если кто-то может предложить способ сделать это и написать решение моей проблемы, я был бы очень благодарен.

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

W1M0130 
03/12/2012 00:00 SS_001 0 0 0 0 0 0 0 0 
03/12/2012 00:00 SS_002 15 14 149 64 0 0 0 1 
03/12/2012 00:00 SS_003 4 3 233 100 0 0 0 1 
03/12/2012 00:00 SS_004 0 0 0 0 0 0 0 0 
03/12/2012 00:00 SS_005 0 0 0 0 0 0 0 0 
03/12/2012 00:00 SS_006 0 0 0 0 0 0 0 0 
03/12/2012 00:00 SS_007 0 0 0 0 0 0 0 0 
03/12/2012 00:00 SS_008 0 0 0 0 0 0 0 0 
$END 
W1M0200 
03/12/2012 00:30 SS_001 0 0 0 0 0 0 0 0 
03/12/2012 00:30 SS_002 12 11 136 58 0 0 0 1 
03/12/2012 00:30 SS_003 3 2 213 91 0 0 0 1 
03/12/2012 00:30 SS_004 0 0 0 0 0 0 0 0 
03/12/2012 00:30 SS_005 0 0 0 0 0 0 0 0 
03/12/2012 00:30 SS_006 0 0 0 0 0 0 0 0 
03/12/2012 00:30 SS_007 0 0 0 0 0 0 0 0 
03/12/2012 00:30 SS_008 0 0 0 0 0 0 0 0 
$END 
W1M0230 
... 

Имя файла первого выходного файла будет W1M0130.txt и содержание были бы ниже линии, вплоть до следующего файла (W1M0200). Если это может помочь, имена файлов начинаются с W, а строки содержимого начинаются с даты, за исключением последней строки, которая всегда равна $ END.

Ваша помощь приветствуется. Спасибо!

+0

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

+0

Ну, я использую Windows 7 и Windows Server 2008 R2. Я установил функцию powershell в 2008 году, и раньше я использовал скрипты vb/batch. Я не знаю, можно ли делать то, что я ищу с этим, так как это был бы самый простой вариант для меня: :) Спасибо! – user1271818

+0

Я думал о компьютерных языках, таких как Java или C++. На любом компьютерном языке вам придется установить интерпретатор или компилятор, чтобы компьютер Windows мог выполнять исходный код. Возможно, вы сможете делать то, что хотите в сценарии Visual Basic, но это не та область, где у меня есть опыт. –

ответ

1

Вот решение, с которым я столкнулся в VBScript. Благодарим вас за помощь тем, кто внес свой вклад.

textFile = "C:\data.txt" 
saveTo = "C:\" 
writeTo = "" 
headingPattern = "(W[0-9][A-Z][0-9]*)" 

dim fso,fileFrom,regex 
set fso = CreateObject("Scripting.FileSystemObject") 
set fileFrom = fso.OpenTextFile(textFile) 
set regex = new RegExp 

with regex 
    .Pattern = headingPattern 
    .IgnoreCase = false 
    .Global = True 
end with 

while fileFrom.AtEndOfStream <> true 
    line = fileFrom.ReadLine 
    set matches = regex.Execute(line) 

    if matches.Count > 0 then 
    writeTo = saveTo & matches(0).SubMatches(0) & ".txt" 
    set fileTo = fso.CreateTextFile(writeTo) 
    else 
    fileTo.WriteLine(line) 
    end if 
wend 

set fileFrom = nothing 
set fso = nothing 
set regex = nothing 
0

Здесь Clojure версия того, что вам нужно. data.txt должен быть путь к вашему файлу.

(def f "data.txt") 

(defn is-file [s] 
    (.startsWith s "W")) 

(defn is-end [s] 
    (= s "$END")) 

(defn file-writer [f] 
    (java.io.FileWriter. f)) 

(with-open [r (java.io.FileReader. f) 
      buffered (java.io.BufferedReader. r)] 

    (loop [l (line-seq buffered) 
     writer nil] 

    (when (seq l) 
     (let [cur-line (first l) 
      rest-lines (rest l)] 

     (cond 
     (is-file cur-line) 
     (recur rest-lines (file-writer (str cur-line ".txt"))) 

     (is-end cur-line) 
     (do 
      (.close writer) 
      (recur rest-lines nil)) 

     :else 
     (do 
      (.write writer (str cur-line "\n")) 
      (recur rest-lines writer))))))) 
+0

Спасибо Joe23. Я до сих пор не слышал о Clojure :) Я посмотрю, что я могу выкопать, чтобы сделать эту работу. Ура! – user1271818

+0

@ user1271818 Вы упомянули, что находитесь в Windows 7. Поэтому вам, скорее всего, понадобятся Windows-Linebreaks '\ r \ n' вместо Unix' \ n'. – Joe23

+0

Привет. Я просто не понимаю, как это сделать. Я попытался установить ClojureBox для компиляции, но я нахожусь на своем пути. У кого-нибудь есть решение VB Script? :) – user1271818

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