Есть текстовый файл, в котором текст разделен пустыми строчками, т.е. абзац – пустая строка, абзац – пустая строка.
Есть шаблон html страницы, нужно чтобы программа брала первый абзац из файла – создавала страницу, удаляла абзац и т.д. по нажатию кнопки одна страница.
Лучше всего сразу ввести все абзацы в массив (если, конечно, файл в пределах пяти мегов - дальше я бы подумал над этим), а потом просто доставать оттуда.
Хотя, в общем-то, я даже не понял - в чём проблема?
P.S. Это один из горячо любимых мною видов вопросов - без знака вопроса в тексте. 8)
Я хочу написать программу, в коде программы лежит код страницы, по нажатию на кнопку нужно брать из файла абзац текста и вставлять в код страницы и сохранять html страницу, после чего удалять взятый абзац из файла.
Лучше чтобы все было в цикле, нажал кнопку и абзац за абзацем копировались в шаблон страницы и сохранялись.
Т.е. в файле 100 или больше абзацев, нажал кнопку программа создала 100 страниц, содержащих по очереди один из этих абзацев.
Видимо никто из сильных мира сего человеку помочь не может или не хочет в силу каких-то обстоятельств.
Посему попробую я... Вот код формы. cmdStop и cmdStart - две кнопки, txtIn - текстовое поле для шаблона. Сделано без излишеств. На моем Celeron 1700 Mhz при размере файла с абзацами - 840 Кб и количеством абзацев - 2560 обработка длится 8,5 секунд.
Option Explicit
Const R = vbCrLf & vbCrLf
Const RB = "%body%"
Dim CNC As Boolean
Public Sub BuildAll(ByVal TIn$, ByVal DROut$, ByVal SIN$, ByVal SFL$)
' TIn - шаблон (слово, которое будет заменено на содержание абзаца - константа RB).
' DROut - папка, куда будут выводиться файлы
' SIN - имя файла, где находятся абзацы
' SFL - шаблон имени файла (вопросительный знак в SIN заменяется на порядковый номер абзаца)
' Пример вызова: BuildAll txtIn.Text, "C:\Build", App.Path & "\Data.txt", "Index_?.html"
' CNC - переменная для выхода из процедуры. Ставим CNC = True и досрочно покидаем цикл...
Dim N$, F$, SB$, SD() As String, I&, CS&
On Error Resume Next
CNC = False
N = FreeFile
Open SIN For Binary As #N
SB = Space(LOF(N))
Get #N, , SB
ReDim SD(0)
SD = Split(SB, R, , vbTextCompare)
Close #N
CS = UBound(SD)
For I = 0 To UBound(SD)
If CNC Then Exit Sub
SD(I) = Trim(SD(I))
If SD(I) <> "" Then
F = Replace(SFL, "?", I + 1, , , vbTextCompare)
N = FreeFile
Open DROut & "\" & F For Output As #N
Print #N, Replace(TIn, RB, SD(I), , , vbTextCompare)
Close #N
End If
DoEvents
Next I
End Sub
Private Sub cmdStart_Click()
On Error Resume Next
cmdStart.Enabled = False
Refresh
cmdStop.Enabled = True
BuildAll txtIn.Text, "C:\Build", App.Path & "\Data.txt", "Index_?.html"
cmdStart.Enabled = True
cmdStop.Enabled = False
End Sub
Private Sub cmdStop_Click()
On Error Resume Next
CNC = True
End Sub
Private Sub Form_Load()
On Error Resume Next
cmdStop.Enabled = False
End Sub
Private Sub Form_Unload(Cancel As Integer)
On Error Resume Next
End
End Sub