• ベストアンサー

句点で改行

テキストを句点で改行して空白行を1行入れる編集をしたいのですが、どのようにコーディングすればよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#22222
noname#22222
回答No.4

<Test.txt> これはテストです。句点で改行させるコード用。果たして成功するかな。 ↓ <Test2.txt> これはテストです。 句点で改行させるコード用。 果たして成功するかな。 Test.txtをリードしANo1さんの回答に従って改行させTest2.txtに書き出すには4行程のコードを書く必要があります。(ただし、関数が存在すれば...) Private Sub CommandButton1_Click()   Dim strText As String      strText = FileReadAll("d:\temp\test.txt")   strText = Replace(strText, "。", "。" & vbCrLf)   FileWrite "d:\temp\tset2.txt", strText End Sub ※Excel2003で検証! ********************************************************************** このコードが動作するには、 1、以下のFileRearAll関数、FileWrite関数を標準モジュールに追加して下さい。 2、参照設定にMicrosoft Scripting Runtime を追加して下さい。 Option Explicit Public Function FileWrite(ByVal FileName As String, _              ByVal Text As String) As Boolean On Error GoTo Err_FileWrite   Dim fso As FileSystemObject   Dim txs As TextStream      Set fso = New FileSystemObject   Set txs = fso.CreateTextFile(FileName, True)   txs.Write Text   FileWrite = True Exit_FileWrite:   Exit Function Err_FileWrite:   MsgBox Err.Description & "(FileWrite)", vbExclamation, " 関数エラーメッセージ"   Resume Exit_FileWrite End Function Public Function FileReadAll(ByVal FileName As String) As String On Error GoTo Err_FileReadAll    Dim fso As FileSystemObject    Dim fil As File    Dim txs As TextStream       Set fso = New FileSystemObject    Set fil = fso.GetFile(FileName)    Set txs = fil.OpenAsTextStream(ForReading, TristateUseDefault)    FileReadAll = txs.ReadAll Exit_FileReadAll:    Exit Function Err_FileReadAll:    MsgBox Err.Description & "(FileReadAll)", vbExclamation, " 関数エラーメッセージ"    Resume Exit_FileReadAll End Function

konnyaku
質問者

お礼

無事動きました。ありがとうございました。(^_^)

その他の回答 (7)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.8

> GetText = で、「変数が定義されていません。」というメッセージが出ました。 あ。。。次のように訂正します。 GetText = Space$(FileLen(strFilename))      ↓ Buffer = Space$(FileLen(strFilename)) WEB 投稿するテキストを編集した際の単純なミスです。すみません。

konnyaku
質問者

お礼

無事動きました。m(_"_)m でも、どこに書かれたのでしょうか^^;

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.7

こんにちは。 テキストファイル操作を今から覚えるのであれば、 s_husky さんが使われて いる FileSystemObject の方が良いのですが、昔ながらの Open、Get、Put ステートメントを使った場合のサンプルとしてご紹介します。 一応 Excel VBA で書きましたが、VB であっても Application.GetOpenFilename が CommonDialog コントロールに変わるだけで、多少の変更で動きます。 指定したテキストファイルと同一のフォルダに結果を書き出します。 Option Explicit Sub Sample()   Dim strFilename As String   Dim strDir   As String   Dim Buffer   As String   Dim n      As Long   Const cnsOUTPUT As String = "_Output.txt"   'テキストファイルの指定   strFilename = Application.GetOpenFilename("テキストファイル,*.txt")   If UCase$(strFilename) = "FALSE" Then     Exit Sub   Else     strDir = Left$(strFilename, InStrRev(strFilename, "\"))   End If   On Error GoTo ERROR_HANDLER      'バイナリとしてテキストを読み込み   n = FreeFile()   GetText = Space$(FileLen(strFilename))   Open strFilename For Binary As #n     Get #n, , Buffer   Close #n   '「句点」の全半角を統一   Buffer = Replace(Buffer, "。", "。")   '「句点」→「句点+改行コード+改行コード」に置換   Buffer = Replace(Buffer, "。", "。" & vbCrLf & vbCrLf)   'テキスト出力   n = FreeFile()   Open strDir & cnsOUTPUT For Binary As #n     Put #n, , Buffer   Close #n   Exit Sub ERROR_HANDLER:   Close #n   MsgBox "Error(" & Err.Number & ")" & vbCrLf _       & Err.Description End Sub

konnyaku
質問者

お礼

ご回答ありがとうございます。GetText = で、「変数が定義されていません。」というメッセージが出ました。m(_"_)m

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

#5です。 >openのところで、「ファイルが見つかりません 私のコードをそのまま実行してませんか。自分のメモ帳で作ったファイル名に変えること。これをユーザーに指定させるようにも、コードかけますが。 とりあえずOpenの” ”の中を自分のケースに変え実行してみてください。その実行後text9.txtを開いてみてください。

konnyaku
質問者

お礼

途中まで、書かれていました。一行ずつ、句点が着いていました…。空白行のあるところで、エラーになったようです。(^_^;)

konnyaku
質問者

補足

すいません。ファイル名間違えていました。次のステップに進みまして、If Mid(s, Len(s), 1) <> "。" Thenのところで、「プロシージャの呼び出し、または引数が不正です。(Error 5)」となりました。m(_"_)m

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

#2です。補足に対して コード Sub testo1() Open "text8.txt" For Input As #1 Open "text9.txt" For Output As #2 While Not EOF(1) Line Input #1, s st = 1: sn = "" '--- If Mid(s, Len(s), 1) <> "。" Then s = s & "。" End If '-- Do p = InStr(st, s, "。") sn = sn & Mid(s, st, p - st + 1) & vbCrLf & vbCrLf st = p + 1 If p = Len(s) Then GoTo p1 Loop '--- p1: Print #2, Left(sn, Len(sn) - 2) Wend '--- Close #1 Close #2 End Sub (例データ)text8.txt そういう場合は、良く考えてください。即断し無いようにしましょう。急いでも良い知恵は出てきません。 ご回答ありがとうございます。ファイルはエクセルシート、ワードでも良いです。出力するまでのコードがあると嬉しいです。入力の部分も書かれていると嬉しいです。よろしくお願いします。 (結果)text9.txt そういう場合は、良く考えてください。 即断し無いようにしましょう。 急いでも良い知恵は出てきません。 ご回答ありがとうございます。 ファイルはエクセルシート、ワードでも良いです。 出力するまでのコードがあると嬉しいです。 入力の部分も書かれていると嬉しいです。 よろしくお願いします。

konnyaku
質問者

お礼

openのところで、「ファイルが見つかりません。」というメッセージが出てしまいました。(^_^;) アドレス指定してもダメなのでしょうか?ありがとうございました。m(_"_)m

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

#2です。#2の補足・お礼に関して。 カテがVBであること、プログラムの質問であることから、入力 出力はわかる力がある方と仮定しましたが・・。 エクセルかワードで、ということだとVBAですね。VBから入る質問も出る事があるが。 またWordVBAは経験者が少ないようです。 エクセルなら、入力したシート、セルの状態を決めて(教えて)もらわないと、プログラムができません。エクセルVBAを触ったら判るでしょう。セル番地がコードの中に頻繁に出てくることを。 もう既にテキストは、エクセル・ワードなどに打ち込んであるのですか。 まだならメモ帳に打ち込んで、または貼り付けて、質問するのが、本質問の既に出ている、諸回答が生かせ易いのでは無いかと思います。

konnyaku
質問者

補足

説明不足ですいません。メモ帳に貼り付けてあります。エクセルVBAの方が良いです。(^_^;)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

Sub testo1() s = "そういう場合は、良く考えてください。即断し無いようにしましょう。急いでも良い知恵は出てきません。" st = 1: sn = "" Do p = InStr(st, s, "。") ' MsgBox p If p = 0 Then GoTo p1 sn = sn & Mid(s, st, p - st + 1) & vbCrLf & vbCrLf st = p + 1 Loop p1: MsgBox sn End Sub をご参考に。 >テキストを テキスト「ファイル」の状態ですか。 新しいテキストファイルをテキストファイルで出力するのですか。 まあそうだとしても、その辺は、判るでしょう。

konnyaku
質問者

お礼

ありがとうございます。メッセージボックスで表示していたのですね。早いですね。(^_^;) でも、コピーができないので、コピーできるものに出力できたらと思います。お願いします。m(_"_)m

konnyaku
質問者

補足

ご回答ありがとうございます。ファイルはエクセルシート、ワードでも良いです。出力するまでのコードがあると嬉しいです。入力の部分も書かれていると嬉しいです。よろしくお願いします。m(_"_)m

  • Kuppycat
  • ベストアンサー率50% (109/216)
回答No.1

dim str as string str = "サンプルです。サンプルです。" str = replace$(str, "。","。" & vbCrLf) こんな感じかな。 vbCrLfはキャリッジリターンラインフィード。 chr(13) & chr(10) のVB定義定数です。

konnyaku
質問者

補足

ありがとうございます。早速試してみましたが、出力のコードがありません。どのようにコーディングするのでしょうか。よろしくお願いします。m(_"_)m

関連するQ&A