UNIXで作成したTextファイルを読み込むには

解決


アイ  2001-05-12 07:43:52  No: 74312  IP: [192.*.*.*]

Unixで作成した数値データをVBで読み込んで図化するプログラムを作っていますが、うまく読み込めません。UnixとWindowsの改行コードが違うためと思います。VBではUnixの改行コードに対応できる読み込みの方法があるのでしょうか。

編集    削除
PAPY  2001-05-12 10:08:25  No: 74313  IP: [192.*.*.*]

「ASCIIコード」での読み込みではなく「Bainaryコード」で読み込めばいいのではないでしょうか?

アスキーコード  ・・・TXTなど。。。
バイナリコード  ・・・BMP/EXEなど。。。

編集    削除
たかみちえ  2001-05-12 18:55:09  No: 74314  IP: [192.*.*.*]

自作、改行コードを変換するメソッドです。
でも、なぜかリッチテキストに正常に表示できないので、
公開しようかと思ってるけど、今は公開してません。
ちなみにテキストボックスには正常に出力されました。
文字化けしたけど、それはバイナリーモードで読んで、
強引にラインインプットしたせい…。
'♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪
'コード変換(CodeExchange)、引数ふたつ
'Text−変換すべき文章
'CodeType−0がWindows、1がUNIX、2がMacintosh、3だと改行を抹消、その他255までは全部無変換、省略すると0(Win)
'
'もどりちは変換済み文章
'♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪
Public Function CodeExchange(Text As String, Optional CodeType As Byte = 0) As String
    Select Case CodeType
    Case 0
        Text = Replace(Text, Chr(13) + Chr(10), "dpenterkey")
        Text = Replace(Text, Chr(10), Chr(13) + Chr(10))
        Text = Replace(Text, Chr(13), Chr(13) + Chr(10))
        Text = Replace(Text, "dpenterkey", Chr(13) + Chr(10))
    Case 1
        Text = Replace(Text, Chr(13) + Chr(10), Chr(10))
        Text = Replace(Text, Chr(13), Chr(10))
    Case 2
        Text = Replace(Text, Chr(13) + Chr(10), Chr(13))
        Text = Replace(Text, Chr(10), Chr(13))
    Case 3
        Text = Replace(Text, Chr(10), "")
        Text = Replace(Text, Chr(13), "")
    End Select
    CodeExchange = Text
End Function
'♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪
改行コードについては、とほほさんのページ
(http://tohoho.wakusei.ne.jp/)が参考になるかと思います

編集    削除
アイ  2001-05-13 07:06:57  No: 74315  IP: [192.*.*.*]

ありがとうございます。
バイナリコードで読み込むしかないのでしょうか。
Cでは改行コードを指定して読み込みできるはずですが、VBではこのような読み込みの方法はありませんか。あまりにも長いデータなので、改行コードを変換するには時間がかかりますし、FTPを使えばコードの変換はできるはずですが、Unix上のデータを直接Windows上で読み込みたいです。

編集    削除
ZORO  URL  2001-05-15 21:03:51  No: 74316  IP: [192.*.*.*]

データはどのくらいの長さなのでしょうか?
確かVBの文字列変数は2MBまで格納可能だったと思いますので、データを文字列変数に格納して、その後にSplit関数で改行コードごとに分ければ、行単位の文字列が取得できます。
的外れな答えだったらごめんなさい。

編集    削除
アイ  2001-07-12 20:36:02  No: 74317  IP: [192.*.*.*]

改行コード判別の方法とUnixデータ読み込みは以下のようにして解決しました。
Open file1 for Input As #10 '改行コード判別のためにファイルオープン

linesfromfile = Input(127, #10)
due1 = Mid(linesfromfile, 126, 1)
due2 = Mid(linesfromfile, 126, 2)
If due2 = vbCrLf Then
'Windouws
checkcr = 1
'Debug.Print
Else
 If due1 = vbCr Then
 checkcr = 2
 End If
 If due1 = vbLf Then
'Unix
 checkcr = 3
 End If
close #10
'
Open file1 for Input As #10
If checkcr = 1 Then
'Windowsの場合
 For i = 1 To endnumber
 Input #10, time(i), m(i), xcen(i), ycen(i), z1(i), tx(i), ty(i), tt(i), pp(i), zz2(i), zz3(i)
 Next i
Else
'Unixの場合(あるいは、改行コードがvbCr,vbLf)
 For i = 1 To endnumber
linesfromfile = Input(126, #10)
time(i) = Mid(linesfromfile, 1, 10)
m(i) = Mid(linesfromfile, 12, 5)
xcen(i) = Mid(linesfromfile, 18, 10)
ycen(i) = Mid(linesfromfile, 30, 10)
z1(i) = Mid(linesfromfile, 42, 12)
tx(i) = Mid(linesfromfile, 54, 12)
ty(i) = Mid(linesfromfile, 66, 12)
tt(i) = Mid(linesfromfile, 78, 12)
pp(i) = Mid(linesfromfile, 90, 12)
z2(i) = Mid(linesfromfile, 102, 12)
z3(i) = Mid(linesfromfile, 114, 12)
Next i
endif

編集    削除