テキストで


This is <改行記号>
a pen. I have <改行記号>
a book. <改行記号>
<改行記号>
I go to <改行記号>
the park. <改行記号>
It is <改行記号>
a fine day.<改行記号>
<改行記号>

というファイルを

\begin{\itemize}
\item 空白
\begin{\itemize}
\item This is a pen.
\item I have a book.
\end{\itemize}
\item 空白
\begin{\itemize}
\item I go to a park.
\item It is a fine day.
\end{\itemize}
\end{\itemize}

に置換するにはどうしたらよいでしょうか。よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/04/27 06:15:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:ku__ra__ge No.1

回答回数118ベストアンサー獲得回数40

ポイント60pt

置換するための簡単なプログラムを書いてみました。

以下の内容をテキストファイルに貼り付けて、それを「conv.vbs」という名前で保存してください。

その後、置換したいファイルを「conv.vbs」のアイコンにドラッグ&ドロップすると、

置換したいファイルと同じ場所に「output.txt」という名前で置換した結果のファイルが作成されます。


やっていることは、まず<改行記号>だけの行でテキストを区切ってから、

それぞれをピリオドで改行しながら形式に合った形で出力するというものです。


Set oFSO = CreateObject("Scripting.FileSystemObject")

sInFile = GetFile()

sTextList = ReadFile(sInFile)
sOutFile = oFSO.GetFile(sInFile).ParentFolder.Path & "\" & "output.txt"

Call OutFile(sTextList, sOutFile)

WScript.Echo "置き換え終了"

'ドラッグ&ドロップで渡されたファイル名を得る
Function GetFile()
    Set oWArgv  = WScript.Arguments
    If oWArgv.length = 0 Then
      WScript.Echo "ドラッグ&ドロップしてください。"
      WScript.Quit
    End If
    GetFile = oWArgv.item(0)
End Function

'読み込み
Function ReadFile(sFileName)
    Set oTs = oFSO.OpenTextFile(sFileName, 1)

    bNullLine = False
    sStr = ""
    Do While Not oTs.AtEndOfStream
        sLine = oTs.ReadLine()
        sStr = sStr & Trim(sLine) & " "

        If sLine = "" Then
            If bNullLine = False Then sStr = sStr & Chr(0)
            bNullLine = True
        Else
            bNullLine = False
        End If
    Loop
    oTs.Close

    If Right(sStr, 1) = Chr(0) Then sStr = Left(sStr, Len(sStr) - 1)
    ReadFile = Split(sStr, Chr(0))
End Function

'書き出し
Sub OutFile(sTextList, sOutFile)
    Set oTs = oFSO.CreateTextFile(sOutFile)
    oTs.WriteLine("\begin{\itemize}")

    For i = 0 To UBound(sTextList)
        oTs.WriteLine("\item ")
        oTs.WriteLine("\begin{\itemize}")
        
        sSplitPeriodTextList = Split(sTextList(i), ".")
        For j = 0 To Ubound(sSplitPeriodTextList)
            sWriteText = Trim(sSplitPeriodTextList(j))
            If sWriteText <> "" Then oTs.WriteLine("\item " & sWriteText & ".")
        Next

        oTs.WriteLine("\end{\itemize}")
    Next

    oTs.WriteLine("\end{\itemize}")
    oTs.Close()
End Sub
id:filofax

ありがとうございます。早速試してみます。

2009/04/22 22:24:00

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません