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

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

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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qテキストファイルから改行コードを削除して読込む方法

ExcelエクセルVBAマクロについてテキストファイルから改行コードを取り除いて
変数に読み込む方法について確認させてください。

下記のVBAログラムはWordファイルをテキストファイルに落としたファイルを変数aに
読み込んでいます。
このとき、読み込んだテキストファイルはWordファイルをテキストファイルに
落とし込んだファイルなので改行コードが残ってしまいます。
この改行コードを削除したうえで変数aに読み込みたいのですが可能でしょうか。
改行コードはメモ帳では「↓」と下矢印に似た文字で表示されます。
(実際には下矢印ではないようです。)
今のところ、Replace関数で改行コードを削除するプログラムを
考えているのですが、改行コードのVBAでの表現方法が分からないので
先に進むことが出来ません。いい案があればぜひご教授下さい。
あるいはほかの方法でも改行コードが削除出来れば結構です。

またこの変数aに読み込んである文字列からかぎカッコの内部にある文字を
抽出してエクセルの行方向に出力する方法があればご教授頂ければ幸いです。
例えば
“あなたは「こんにちは」と言いました。
私は「元気ですか」と聞きました。”

が文字列aに読み込んである場合、“こんにちは”、“元気ですか”を抽出して
エクセルに順に出力という方法です。

色々と書きましたが、よろしくお願いいたします。
以下、VBAプログラム本文です。

----------------------------------
Sub sample1()

Dim a As String

a = CreateObject("Scripting.FileSystemObject").GetFile("C:\sample.txt").OpenAsTextStream.Readall
CreateObject("Scripting.FileSystemObject").GetFile("C:\sample.txt").OpenAsTextStream.Close

End Sub

ExcelエクセルVBAマクロについてテキストファイルから改行コードを取り除いて
変数に読み込む方法について確認させてください。

下記のVBAログラムはWordファイルをテキストファイルに落としたファイルを変数aに
読み込んでいます。
このとき、読み込んだテキストファイルはWordファイルをテキストファイルに
落とし込んだファイルなので改行コードが残ってしまいます。
この改行コードを削除したうえで変数aに読み込みたいのですが可能でしょうか。
改行コードはメモ帳では「↓」と下矢印に似た文字で表示されま...続きを読む

Aベストアンサー

Windowsの改行はCRLFです。#1さんの仰るとおり、chr(13)+chr(10)ですね。
あるいはvbCr,vbLf,vbCrLfなんてのもあります。

あとプログラム本文は良くないです。
最低でもこう書くべきです。
'-------------------------------------------------
dim objStream as Object
set objStream = CreateObject("Scripting.FileSystemObject").GetFile("C:\sample.txt").OpenAsTextStream
a=objStream.readall
objStream.Close
'--------------------------------------------------
もとのソースだと、...OpenAsTextStreamと書いた時点でテキストを開いてます。
1回目と2回目は別のモノ。つまり2回開いてて、1回目は開きっぱなし。

>かぎカッコの内部にある文字を抽出

これはご自分で考えてみて下さい。
例えば、crlfを除去したのなら
b=replace(a,"「",vbcr)
b=replace(b,"」",vbcr)
とでもしておいてvbcrでSplit()すれば配列の奇数番目が括弧の中身です。
括弧が閉じてない場合とか半角だったりする場合とかもあるので注意ですね。
一番良いのは正規表現を使う方法ですが、これはちょっとハードルが高いでしょう。

Windowsの改行はCRLFです。#1さんの仰るとおり、chr(13)+chr(10)ですね。
あるいはvbCr,vbLf,vbCrLfなんてのもあります。

あとプログラム本文は良くないです。
最低でもこう書くべきです。
'-------------------------------------------------
dim objStream as Object
set objStream = CreateObject("Scripting.FileSystemObject").GetFile("C:\sample.txt").OpenAsTextStream
a=objStream.readall
objStream.Close
'--------------------------------------------------
もとのソースだと、...OpenAsTextSt...続きを読む

QVB6.0 改行コードのないファイルの読み込み

VB6.0で改行コードが無く、半角と全角文字が入り混じっているファイルの読み取り方法を教えて下さい。

通常の一行読み込みの範囲を大幅に超えている文字列です。

他のサイトで以下のようなプログラム(20バイトずつ切り取って読む)を見つけたのですが、

Dim InFileNo As Integer
Dim Buf As string * 10
Dim LINE As Long

InFileNo = FreeFile
Open "C:\test.txt" For Random As #InFileNo Len = 20

LINE = 1
Do Until EOF(InFileNo)
Get #InFileNo, LINE, buf
LINE = LINE + 1
Loop

これだと、半角と全角が混じっている箇所で文字化けを起こしてしまいます。

以上です。よろしくお願い致します。

Aベストアンサー

文字数指定の読み込みはInput(文字数,ファイル番号)という文を
使います。但し、EOFを超えるとエラーになるので、TextStreamの
方が楽かも知れません。以下はその例です。

Dim FSO, Txs
Dim Buf As String
Dim LINE As Long

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Txs = FSO.OpenTextFile("C:\test.txt", 1) '1 は入力モード
Do Until Txs.AtEndOfStream
    LINE = LINE + 1
    Buf = Txs.Read(20) '20文字という意味
Loop
Txs.Close

Readメソッドは残りが20文字未満の場合、エラーにならず、残りの
文字列を返します。Input文では残りが指定文字数未満だとエラーに
なります。但し、EOF検出後にReadメソッドを実行すると、さすがに
エラーになります。

QLine Inputにて改行があっても全行読むことがあるのでしょうか?

お世話になります。
今日仕事でcsvファイルをLine Inputで読み込んだとき
一回目のLine Inputで最後まで読んでしまうファイルがありました。

形式としては 下記のような感じだったのですが(外には出せないデータですのでこんな感じだというイメージです。)
家でこれを読ませると普通に1行ずつ読んでくれます。
読めないデータは1行目を削除すると一行ずつ読んでくれました。
したがって改行コードもあり認識しているはずなのですが・・・
一行すべて読んでしまうパターンがあるのでしょうか?
ご存知の人おられましたらよろしくお願いいたします。

,,,,,2006/12/28,2006/12/28,2006/12/28,2006/12/28,2006/12/28,2006/12/28
,,,,,10:10,10:10,10:10,10:10,10:10,10:10
2,,,,,ほげ,ぴよ,7,ぺぺぺぺ,0,2
2,,,,,ほげ,ぴよ,7,ぺぺぺぺ,255,3
2,,,,,ほげ,ぴよぷ,7,ぺぺ,1,4
3,,,,,ほげ,ぴよ,3,ぺ,23,5
4,,,,,ほげ,ぴよ,3,ぺぺぺぺ,3,7
5,,,,,ほげ,ぴよぷ,7,ぺぺぺぺ,5,6
6,,,,,ほげ,ぴよ,4,ぺぺ,-23.06666667,8
7,,,,,ほげ,ぴよ,7,ぺ,-43.32380952,9
7,,,,,ほげ,ぴよぷ,5,ぺぺぺぺ,-63.58095238,0
7,,,,,ほげ,ぴよ,7,ぺぺぺぺ,-83.83809524,5
7,,,,,ほげ,ぴよ,7,ぺぺ,-104.0952381,6

お世話になります。
今日仕事でcsvファイルをLine Inputで読み込んだとき
一回目のLine Inputで最後まで読んでしまうファイルがありました。

形式としては 下記のような感じだったのですが(外には出せないデータですのでこんな感じだというイメージです。)
家でこれを読ませると普通に1行ずつ読んでくれます。
読めないデータは1行目を削除すると一行ずつ読んでくれました。
したがって改行コードもあり認識しているはずなのですが・・・
一行すべて読んでしまうパターンがあるのでしょうか?
ご存知...続きを読む

Aベストアンサー

かっての経験を元に状況を再現してみました。

示されている例文をメモ帳にコピペして、それを読み込んで改ざんして保存。
その後に、再読込みをしました。

Private Sub コマンド0_Click()
  Dim I    As Integer
  Dim N    As Integer
  Dim Datas() As String
  Dim NewData As String
  
  Datas() = FileReadArray("D:TEMP\TEXT.TXT")
  N = UBound(Datas())
  NewData = Datas(0) & Chr(10)
  For I = 1 To N
    NewData = NewData & Datas(I) & Chr(10)
  Next I
  FileWrite "D:\Temp\TEXT_NEW.TXT", NewData
End Sub

Private Sub コマンド19_Click()
  Dim strData As String

  Open "D:\Temp\TEXT_NEW.TXT" For Input As #1
  Do While Not EOF(1)
    Line Input #1, strData
    Debug.Print strData
    Exit Do
  Loop
  Close #1
End Sub

結果、全行がイミディエイトウインドウに表示されました。

もう、20年も前にもなりますが、GGTの技術者が書いたアプリケーションにこの手の誤りがありました。
米国で最初に製図機を開発した老舗の優秀なプログラマでもミスをするということです。

Chr(10)=>vbCRLF

に修正すると1行目だけが表示されましたので、まず、この手のミスだと思います。

かっての経験を元に状況を再現してみました。

示されている例文をメモ帳にコピペして、それを読み込んで改ざんして保存。
その後に、再読込みをしました。

Private Sub コマンド0_Click()
  Dim I    As Integer
  Dim N    As Integer
  Dim Datas() As String
  Dim NewData As String
  
  Datas() = FileReadArray("D:TEMP\TEXT.TXT")
  N = UBound(Datas())
  NewData = Datas(0) & Chr(10)
  For I = 1 To N
    NewData = NewData & Datas(I) & Chr(10)
 ...続きを読む

QVB6.0のコードエディタでの改行コードやTABの表示

VB 6.0の初心者です。

VB 6.0のコードエディタでは次のようなことはできないのでしょうか。

(1)TABをスペースに変換しない
TABを入れると4個のスペースに勝手に変換されるようですが(厳密には違いますが)、これをなくしたいのです。バックスペースキーを押すとタブ部分が一気に消えるのに、カーソルキーでTAB部分を移動すると1文字ずつ移動してしまいます。これを4文字ずつ移動させたいのです。

(2)TABコードや改行コードの表示
どこにスペース,TAB,改行が入っているかが見た目では分かりません。これらのコードを表示することはできるでしょうか。

他の言語を使っていたときは別のエディタを使用していて、この辺のカスタマイズは自由にできました。VBは難しいのでしょうか。

Aベストアンサー

Visual Studio の統合環境のエディタではそのような細かいことは出来ません。
私はソースを整形するために時々、普通のテキストエディタ(WZエディタ)を使っています。
テキストエディタを使えば、余分なスペースの削除やタブ/スペース変換が簡単に出来ます。

Q改行コード検索

VB6.0について質問です。
ある文字列のデータの中にある改行コードをみつけ
それを取り除いた文字データだけを取得したいのですがうまくいきません><
現在実行しているコードは以下の通りです。

For ixA = 1 To Len(ds.Fields(tmp1).Value)
If Mid(ds.Fields(tmp1).Value, ixA, 2) = vbCrLf Then
MOJI = MOJI & Mid(ds.Fields(tmp1).Value, ixA, ixA - 1) & Mid(ds.Fields(tmp1).Value, ixA + 1, ixA)
End If
Next ixA

文字列を結合するところでわけがわからなくなりました><;
正しいコードか他のやり方をご存知の方ご回答よろしくお願いします!

Aベストアンサー

moji = Replace(ds.Fields(tmp1).Value, vbCrLf, "")

上記のように、【Replace関数】を利用し、改行コードを空文字列に置き換えてはどうでしょうか?


人気Q&Aランキング

おすすめ情報