- ベストアンサー
句点で改行
テキストを句点で改行して空白行を1行入れる編集をしたいのですが、どのようにコーディングすればよいのでしょうか?
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
<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
その他の回答 (7)
- KenKen_SP
- ベストアンサー率62% (785/1258)
> GetText = で、「変数が定義されていません。」というメッセージが出ました。 あ。。。次のように訂正します。 GetText = Space$(FileLen(strFilename)) ↓ Buffer = Space$(FileLen(strFilename)) WEB 投稿するテキストを編集した際の単純なミスです。すみません。
お礼
無事動きました。m(_"_)m でも、どこに書かれたのでしょうか^^;
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。 テキストファイル操作を今から覚えるのであれば、 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
お礼
ご回答ありがとうございます。GetText = で、「変数が定義されていません。」というメッセージが出ました。m(_"_)m
- imogasi
- ベストアンサー率27% (4737/17069)
#5です。 >openのところで、「ファイルが見つかりません 私のコードをそのまま実行してませんか。自分のメモ帳で作ったファイル名に変えること。これをユーザーに指定させるようにも、コードかけますが。 とりあえずOpenの” ”の中を自分のケースに変え実行してみてください。その実行後text9.txtを開いてみてください。
お礼
途中まで、書かれていました。一行ずつ、句点が着いていました…。空白行のあるところで、エラーになったようです。(^_^;)
補足
すいません。ファイル名間違えていました。次のステップに進みまして、If Mid(s, Len(s), 1) <> "。" Thenのところで、「プロシージャの呼び出し、または引数が不正です。(Error 5)」となりました。m(_"_)m
- imogasi
- ベストアンサー率27% (4737/17069)
#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 そういう場合は、良く考えてください。 即断し無いようにしましょう。 急いでも良い知恵は出てきません。 ご回答ありがとうございます。 ファイルはエクセルシート、ワードでも良いです。 出力するまでのコードがあると嬉しいです。 入力の部分も書かれていると嬉しいです。 よろしくお願いします。
お礼
openのところで、「ファイルが見つかりません。」というメッセージが出てしまいました。(^_^;) アドレス指定してもダメなのでしょうか?ありがとうございました。m(_"_)m
- imogasi
- ベストアンサー率27% (4737/17069)
#2です。#2の補足・お礼に関して。 カテがVBであること、プログラムの質問であることから、入力 出力はわかる力がある方と仮定しましたが・・。 エクセルかワードで、ということだとVBAですね。VBから入る質問も出る事があるが。 またWordVBAは経験者が少ないようです。 エクセルなら、入力したシート、セルの状態を決めて(教えて)もらわないと、プログラムができません。エクセルVBAを触ったら判るでしょう。セル番地がコードの中に頻繁に出てくることを。 もう既にテキストは、エクセル・ワードなどに打ち込んであるのですか。 まだならメモ帳に打ち込んで、または貼り付けて、質問するのが、本質問の既に出ている、諸回答が生かせ易いのでは無いかと思います。
補足
説明不足ですいません。メモ帳に貼り付けてあります。エクセルVBAの方が良いです。(^_^;)
- imogasi
- ベストアンサー率27% (4737/17069)
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 をご参考に。 >テキストを テキスト「ファイル」の状態ですか。 新しいテキストファイルをテキストファイルで出力するのですか。 まあそうだとしても、その辺は、判るでしょう。
お礼
ありがとうございます。メッセージボックスで表示していたのですね。早いですね。(^_^;) でも、コピーができないので、コピーできるものに出力できたらと思います。お願いします。m(_"_)m
補足
ご回答ありがとうございます。ファイルはエクセルシート、ワードでも良いです。出力するまでのコードがあると嬉しいです。入力の部分も書かれていると嬉しいです。よろしくお願いします。m(_"_)m
- Kuppycat
- ベストアンサー率50% (109/216)
dim str as string str = "サンプルです。サンプルです。" str = replace$(str, "。","。" & vbCrLf) こんな感じかな。 vbCrLfはキャリッジリターンラインフィード。 chr(13) & chr(10) のVB定義定数です。
補足
ありがとうございます。早速試してみましたが、出力のコードがありません。どのようにコーディングするのでしょうか。よろしくお願いします。m(_"_)m
お礼
無事動きました。ありがとうございました。(^_^)