Создать несколько текстовых файлов из одного текстового файла с конкретными именами файлов - PullRequest
0 голосов
/ 15 марта 2012

Добрый день,

Я ищу код, который бы помог мне не тратить на это 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.

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

Ответы [ 2 ]

1 голос
/ 20 марта 2012

Вот решение, которое я выбрал в 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 голосов
/ 15 марта 2012

Здесь 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)))))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...