
No.5ベストアンサー
- 回答日時:
置き換えてファイルの保存をしたかったのですね・・・
それと、やはり読み込まない事には、置き換えれないですよ。
だって読んでないんだもん・・・
んで、置き換えで保存するのに一番早いのは#2に書いてあるようにまず
「GETで読む」
「Replace関数で置き換える」← 一度でファイル内の文字列を変換できます(VB6仕様)
「PUTでファイルに落とす」
これをファイルの数だけ繰り返す処理になると思います。
大まかにわけると、たった3つの処理で済みます。
回答ありがとうございます。
こんな簡単な方法があったとは・・・
Replaceって文字を繰り返す時に使うものだと思っていました。
もっと勉強しなくてはいけませんね。
これからもよろしくご教授願います。
No.3
- 回答日時:
昔懐かしいMS-BASICの頃を思い出します。
VBで次ぎのロジックはいかがですか。結構Basic時代の入出力関数がVBでも使えるようです。
a=input(50,1)でファイル番号1の50バイトをストリングaに読みこみます。
これだとCRが中身にあっても、50バイト読みこむと
思います。
ここでCRのストリングの位置のpバイト目をInstr関数で見つけ、
CRをCR+LFでおきかえる。(またはLFを加える。)1バイトより
pバイトめまでとLFをbと言う文字列に作る。
そのbという文字列をprint #2,bでファイル番号2の
アウトプットファイルに書き出す。
次ぎにaのP+1バイトより後のストリングで最初CRの位置を
見つけ同じ事を行う。aの中にCRが見つからなくなれば
50バイトまでを一時記録しておき、次ぎの50バイトの
先頭部分と結合しファイル番号2のアウトプットファイルに書く。
次ぎにa=input(50,1)を実行すると、61バイトから100バイト
目がaに入るので同じ事を行う。以下#1のファイルの終わりまで
繰り返す。
Instrである文字列を見つけるとき、その文字列の作り方は、
制御コードのCRやLFやCR+LFなどのときは、文字は
使えずc=chr(xx)+chr(yy)などのchr関数と+または
&を使う。
下記はinput関数がVBでも使えるかテストしたもので、
作る時間がなくて、お尋ねの要求を満たすプログラム
そのものでなくて済みません。
改行&H0Aはchr(10)なんですが,復帰はchr(32)
だったと思いますが、手許に表がなくて未確認です。
InputとInputB関数があるかもしれませんので調べて
下さい。
文字列を扱う関数はInstr,Index,Substr、Mid,Right
などである。
Private Sub Form_Load()
c = Chr(10) & Chr(32)
Open "c:\javasamples\test1.txt" For Input As #1
Open "c:\javasamples\testn.txt" For Output As #2
For i = 1 To 3
a = Input(50, 1)
' p = InStr(a, c)
' MsgBox p
'MsgBox Mid(a, 1, p) & "=="
MsgBox a
Next i
a = Input(40, 1)
MsgBox a
End Sub
No.2
- 回答日時:
にも書いたのですが・・・それとほとんど変更なしのファイルの読み込みサンプルです。
読み込みを一行ずつ行わないで、バイナリ形式で全てを一度で読み、指定の区切り文字で配列にセットしてます。
改行コードが"OA"という文字列であればこれで可能なのですが。。。
いまいち質問の内容を理解しきれていない部分があります。
違ったらご指摘ください。
Sub Main()
'ファイル名
Const FILENAME As String = "c:\test.txt"
'テキストを配列で記憶
Dim valAry As Variant
'問題ファイルの読み込み(ファイル名:改行文字:取得した文字列)
If Not subConvert(FILENAME, "0A", valAry) Then
Call MsgBox("[" & FILENAME & "]失敗")
GoTo PGMEND
End If
PGMEND:
End Sub
'テキストファイルを読み込み、配列にして返す
'パラメータ1:ファイルパス
'パラメータ2:テキストファイルは何区切り?
'パラメータ3:返す配列
Public Function subConvert(inFilePath As String, strCut As String, outAry As Variant) As Boolean
Dim lngFileSize As Long 'ファイルサイズ
Dim lngFileNum As Long 'ファイルナンバ
Dim strBuff As String '文字列ワーク
'ファイルサイズの取得
On Error Resume Next
lngFileSize = FileLen(inFilePath)
On Error GoTo 0
'サイズが取得できない時NG処理
If lngFileSize < 1 Then
Exit Function
End If
'取得するためのサイズを用意
strBuff = String(lngFileSize, vbNullChar)
'テキスト取得
lngFileNum = FreeFile
Open inFilePath For Binary As #lngFileNum
Get #lngFileNum, , strBuff
Close #lngFileNum
'文字列を区切り、配列に変換
outAry = Split(strBuff, strCut)
'OKを記す
subConvert = True
End Function
参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=169686
回答ありがとうございます。
参考にさせて頂きます。
やはり、1つずつ見ていくしかないのでしょうか?
私はNo3の方のような方法でLineInputで読込みInstrで検索しrightとLeftを使って挿入しファイルに書き込むという方法を考えていましたが、
No1の方のようにしかもプログラムの中で(出来ればファイルを読み込まず)一発置換をしたいと思って質問しました。
ちょっと虫のいい話でしたか・・・・
皆さんの回答を見ても他アプリケーションを使用しないと一発では置換できない
のでしょうか。
No.1
- 回答日時:
早速の回答ありがとうございます
このソフト簡単でいいんですが、実際に使うのは私ではないので
プログラムの中で処理したいと思っています。
Windowsのワードパットで読込み、保存すると改行コードを変換して
保存してくれるのですが、他のソフトを使わず(プログラムの中で他の
アプリケーションを使うのが面倒なので)プログラムで簡単な方法を
知りたかったのです。
質問がわかりにくくてすみません。
ただ、ヤマトのファイルがMacのTextファイルだという事がわかっただけでも
勉強になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
RGBのバイナリデータをCImageに...
-
perl 特定の文字列をdatファイ...
-
VBSにてCSV読み込みし比較
-
バイト型のデータを16進表記で...
-
エクセルのプロパティーでセキ...
-
エクセルvbaでdocuworksprinter...
-
エクセルで複数のコメントのサ...
-
Excel 相対パス
-
Wordで差込印刷した後に別々の...
-
Excel csv保存 列数が異なる場...
-
ExcelブックをGoogleスプレッド...
-
同じファイル名 上書きしないフ...
-
frxファイルの役目
-
動かなくなってしまった古いVBA...
-
ファイルサーバ上のファイルが...
-
Windows10でコマンドプロンプト...
-
[エクセル]コピーするとオブジ...
-
保存先のフォルダ名を指定した...
-
VBA、ファイル名検索から開く、...
-
エクセルVBAで一つ上の階層...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストファイルを後ろから読...
-
DXFファイルをVBで取り込み、図...
-
ファイル入力のデータを構造体...
-
バイト型のデータを16進表記で...
-
バイナリデーター内の文字を検索
-
ファイルの読みこみ方法とファ...
-
VBScriptの配列は、要素数を指...
-
フォートランのソース変更を試...
-
txtファイルの数字を計算
-
CSVファイルによる検索の高速化
-
日本語を配列に収め、そして表...
-
ファイルをメモリに出力する方法
-
RGBのバイナリデータをCImageに...
-
データグリッドビューの一覧に...
-
C or C++で2次元のデータの並び...
-
Cで2次元配列にCSVファイルを...
-
VBAでテキストファイルを複数開...
-
バイナリ出力
-
バイナリファイルでOutOfMemory...
-
バイナリファイルの一部分をカ...
おすすめ情報