dポイントプレゼントキャンペーン実施中!

改行コードが0A(16進数)となってしまっているファイルを
0D0A(16進数)に変換したいのですが、どのような方法がありますか?
出来れば時間の掛からない方法が知りたいです。

ファイルは、ヤマト運輸の着店コードファイルで件数が3000件ほどあるのですが
改行コードが0AなのでInput#で読み込めません。

ファイルを変更しなくても良い方法があればそれでも結構です。

A 回答 (5件)

置き換えてファイルの保存をしたかったのですね・・・



それと、やはり読み込まない事には、置き換えれないですよ。
だって読んでないんだもん・・・


んで、置き換えで保存するのに一番早いのは#2に書いてあるようにまず
「GETで読む」
「Replace関数で置き換える」← 一度でファイル内の文字列を変換できます(VB6仕様)
「PUTでファイルに落とす」
これをファイルの数だけ繰り返す処理になると思います。

大まかにわけると、たった3つの処理で済みます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
こんな簡単な方法があったとは・・・
Replaceって文字を繰り返す時に使うものだと思っていました。
もっと勉強しなくてはいけませんね。
これからもよろしくご教授願います。

お礼日時:2001/11/21 20:52

一番簡単なのはFTPでしょう。

Windows機を使用してFTPサーバにASCIIモードで送信した後、同様にASCIIモードでそのファイルを受信すれば変換されているはずです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
No1の方と同じ内容になってしまいますので省略させていただきます。
説明不足ですみません。

お礼日時:2001/11/21 00:33

昔懐かしい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
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
No2の方と同じ内容になってしまいますので省略させていただきますが参考にさせていただきます。

お礼日時:2001/11/21 00:31

http://oshiete1.goo.ne.jp/kotaeru.php3?q=169686
にも書いたのですが・・・それとほとんど変更なしのファイルの読み込みサンプルです。
読み込みを一行ずつ行わないで、バイナリ形式で全てを一度で読み、指定の区切り文字で配列にセットしてます。

改行コードが"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
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
参考にさせて頂きます。
やはり、1つずつ見ていくしかないのでしょうか?
私はNo3の方のような方法でLineInputで読込みInstrで検索しrightとLeftを使って挿入しファイルに書き込むという方法を考えていましたが、
No1の方のようにしかもプログラムの中で(出来ればファイルを読み込まず)一発置換をしたいと思って質問しました。
ちょっと虫のいい話でしたか・・・・
皆さんの回答を見ても他アプリケーションを使用しないと一発では置換できない
のでしょうか。

お礼日時:2001/11/21 00:29

漢字コード変換ソフトがあります。



これで、CR+LFに変更すればいけると思います。

参考URL:http://www3.airnet.ne.jp/saka/software/jme.html
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます
このソフト簡単でいいんですが、実際に使うのは私ではないので
プログラムの中で処理したいと思っています。

Windowsのワードパットで読込み、保存すると改行コードを変換して
保存してくれるのですが、他のソフトを使わず(プログラムの中で他の
アプリケーションを使うのが面倒なので)プログラムで簡単な方法を
知りたかったのです。
質問がわかりにくくてすみません。
ただ、ヤマトのファイルがMacのTextファイルだという事がわかっただけでも
勉強になりました。

お礼日時:2001/11/21 00:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!