ファイルの先頭に特殊コードを置いてファイルを作るには

このQ&Aのポイント
  • UNICODE指定したテキストファイルを作成する方法についてお伺いします。メモ帳でファイルのプロパティを確認すると、サイズは2バイト、ディスク上のサイズは4KBとなっています。
  • ASCで255、254と表示される特殊コードの後にUNICODEのデータを並べて記述するプログラムを書きたいのですが、うまくいかず困っています。
  • 質問です。ファイルの先頭に特殊コードを置き、その後にUNICODEのデータを追加するプログラムを書きたいのですが、方法がわかりません。お助けください。
回答を見る
  • ベストアンサー

ファイルの先頭に特殊コードを置いてファイルを作るには

いつもお世話になります。 あるアプリケーションからファイル形式をUNICODE指定してテキストファイルとしてエクスポートしました。 このファイルの拡張子をTXTにしてからメモ帳ですべてを選択して削除してファイルのプロパティを見ると サイズ:2バイト ディスク上のサイズ:4KB(4096バイト) となっています。 Open filename For Input As #1で中身を見ると ASCで255、254です。(このような見方でいいのか?) やりたいことはこのような特殊コードの後にUNICODEのデータを並べて記述するプログラムを書きたいのですが、どうしたらよいか、うまくいかず困っています。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんなかんじでどうですか。 Private Sub Command1_Click() Dim intFileNo As Integer Dim bytUnicodeID(1) As Byte Dim bytData() As Byte Dim strData As String bytUnicodeID(0) = &HFF bytUnicodeID(1) = &HFE strData = "AAAあああ" intFileNo = FreeFile ' 必要に応じてファイルを消すか中身を消してください。 Open "c:\temp\test.txt" For Output As #intFileNo Close #intFileNo ' UNICODEで出力 Open "c:\temp\test.txt" For Binary As #intFileNo Put #intFileNo, , bytUnicodeID bytData = strData Put #intFileNo, , bytData Close #intFileNo End Sub

参考URL:
http://support.microsoft.com/kb/193540/ja
tach_ei
質問者

お礼

この内容でできました。support.microsoftもこれから探すようにします。ありがとうございます。m(_ _)m

その他の回答 (1)

noname#22222
noname#22222
回答No.1

普通にテキストファイルに出力すると、AAAAAがロロに化けるので困っています。 メモ帳で開いた時に、AAAAAになるようにするには? という質問でしょうか? であれば、 Private Sub コマンド0_Click()   FileWrite "c:\temp\aaa.txt", Chr$(255) & Chr$(254) & StrConv("AAAAA", vbUnicode) End Sub 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

tach_ei
質問者

補足

書き込みありがとうございます。 Print #1, Chr$(255) & Chr$(254) で書き込み方法があるのですね。これで試しましたが、目的のファイルはこれを書き込んでもメモ帳には出てこないようにしたいのですが、この方法では半角スペースの黒白反転表示で表示されてしまいます。 この状態で文字を貼り付けるとChr$(255) & Chr$(254)の前に挿入されてしまいます。Chr$(255) & Chr$(254)に相当する部分が常にファイルの先頭になるようにしたいのですが・・・

関連するQ&A

  • EXCEL2007のVBAを使って、テキストファイルを読み込んで別のテ

    EXCEL2007のVBAを使って、テキストファイルを読み込んで別のテキストファイルを作って書き込むというコードを書きましたが、新しく出来たテキストファイルの末尾に、もともとのファイルには無かったスペースが追加されてしまいます。 原因と対策を教えて頂きたいです。 ------------------------------------------------------- Dim FileName1 As String Dim FileName2 As String Dim FileNumber1 As Integer Dim FileNumber2 As Integer Dim Data As String FileName1 = Application.GetOpenFilename("Text Files (*.txt), *.txt") FileName2 = Application.GetSaveAsFilename(, "Text Files (*.txt), *.txt") Data = Space(FileLen(FileName1)) FileNumber1 = FreeFile Open FileName1 For Binary As #FileNumber1 Get #FileNumber1, , Data Close #FileNumber1 'この間に"Data"内容を処理するコードを入れる予定 FileNumber2 = FreeFile Open FileName2 For Binary As #FileNumber2 Put #FileNumber2, , Data Close #FileNumber2 ------------------------------------------------------- このコードで1284バイトのテキストを読み込ませると末尾にスペースが追加されて1918バイトになってしまいました。 "Data"の内容を表示させてもスペースはなく、Len関数で大きさを調べても1284バイトです。

  • テキストファイルとして開くVBA

    フォルダC:\Users\USER\Desktop\あいう において このダイアログを開いて そのなかのファイル(A.xml)を txtファイルとして開いて その名前を テキスト.txt として 同名で保存したいのですが Dim FileName As Variant Dim NewFile As TextFile FileName = Application.GetOpenFilename() Set NewFile = TextFile.Open(FileName) NewFile.SaveAs "テキスト.txt" Activetxtfile.SaveAs FileName:="C:\Users\PC\Desktop\あいう\テキスト.txt", FileFormat:=TextFile どうも違うようです 御教示ください

  • ファイルのアップロードについて

    PERLでファイルのアップロード機能を作成しています。 アップロードと言っても、サーバへのコピーではなく、 データベースへバイナリで格納しなければならないのです。 とりあえず2パターン作成してみたのですが、 OPEN関数を使ってやるとうまくいきません。 -----パターン1(OPEN関数使用)------------- $query = new CGI; $filename = $query->param('msds'); # ファイル名(フルパス)取得 if($filename ne "") { open(ATT, $filename);# or die "Could not open atachment file:"; binmode(ATT); while($bytesread = read(ATT, $buffer, $BUFSZ)){ $file .= $buffer; # ファイルサイズ制限 $file_size ++; if($file_size > 300){ exitError("ファイルサイズが大きすぎます。600KB 以下にして下さい。"); } } close(ATT); } -----パターン2(OPEN関数未使用)------------- $query = new CGI; $filename = $query->param('temp1'); # ファイル名(フルパス)取得 if($filename ne "") { while($bytesread = read($filename, $buffer, $BUFSZ)){ $file .= $buffer; # ファイルサイズ制限 $file_size ++; if($file_size > 300){ exitError("ファイルサイズが大きすぎます。600KB 以下にして下さい。"); } } print "FILE DATA:" . $file . "<BR>"; } パターン2でprint $fileをすると、ファイルの内容が 画面表示されるのですが、パターン1だと、While文に 入ってくれませんでした。 原因がさっぱりわかりません。。。 お分かりになる方が見えましたらご教授願います。

    • ベストアンサー
    • CGI
  • 文字コードが知りたい

    既存のテキストファイル(メモ帳)があるのですが このファイルの文字コードが ANSIなのかUnicodeなのかUTF-8なのかってどうやったらわかりますか? プロパティを見てもわかりませんでした。

  • VBAで、指定したファイルを読み込めません。

    ファイルを読み込むマクロを作ったのですが、「ファイルが見つかりません」というメッセージが出てしまいます。 Open "C:\Documents and Settings\Owner\デスクトップ\textfile.txt" For Input As #1 どこか、 間違ってがっているのでしょうか。

  • 【Access2000】CSVファイルのインポート方法

    Access2000(OS:WinXP)でCSVファイルをインポートするVBAを作成しています。 Open "ファイル名" For Input As #txtFileNumber Input #txtFileNumber, txt1, txt2... 上記のようにtxt1,txt2...の変数に代入しているのですが、CSVファイルの行数が可変のため、どうすれば良いのか困っております。最大100フィールド程あるのですが…。何か良い方法がありましたらお教えください。

  • アクセスデータベースのUnicode圧縮について

    Access2000のメモ型へ4096バイト以下のデータ(約3KB)書き込みを行いましたが、Unicode圧縮がうまく動作していないようでDBサイズが想定の約2倍以上になりました。フィールドプロパティのUnicode圧縮は、「はい」としているのですが、その他に何か処理が必要でしょうか?、また、Unicode圧縮がうまく動作しているか確認する方法があれば教えて下さい。OSはWin2000です。

  • ACCESS CSV形式でエクスポートしたい

    ACCESSで作成したデータをCSV形式でエクスポートしたいです。 ファイルの種類で「テキストファイル(*.txt;*.csv;*.tab;*.asc)」を選択すると 拡張子txt で保存されてしまいます。 もちろん、あとで拡張子を変更すればよいのですが、保存の際に CSV形式にすることは不可能でしょうか?? VBAなど難しいことは、わからないので、出来なければ結構です。 よろしくお願いいたします。

  • 日本語混じりのファイルをランダムアクセスで読みこむ場合

    ファイルを1024バイトずつ読みこみ、その内容をソケットでホストへ送るというアプリがあります。 ファイルを「1024バイト読んで→送信」を繰り返すのですが、ファイルを読みこむところ(Get)で日本語が混じったときにエラーを生じます。 「レコード長が一致しません」というエラーメッセージです。 日本語がはいる桁数だけバイト数は減るためだと思いますが、ランダムアクセスで読みこむと場合の記述の仕方で、何とかならないものかと思案しています。 どなたかご教授ください。よろしくお願いします。 <プログラム記述例>   Dim filenum As Integer   Dim filename As String   Dim buffer As String * 1024   filename = "e:\tmp\file.txt"   filenum = FreeFile   Open filename For Random Access Read As #filenum Len = 1024   Do While Not EOF(filenum)     Get #filenum, , buffer   Loop   Close #filenum

  • 中身を空にした上、リネームしたファイルの復元方法

    ハードディスクの同一フォルダ内の多数のファイルを、誤って、中身を空にした上で、拡張子を txt に変更してしまいました。 変更は以下のような形です。 memo[01].doc (500バイト)  → memo[01].txt (0バイト) keisan[25].xls (100バイト)  → keisan[25].txt (0バイト) これらのファイルを復元する方法がありますか。 元のファイルはほとんどが、 拡張子 doc のファイルなので、場合によっては、 xls のファイルは諦めることも可能です。何とか、doc のファイルだけでも復元したいのですが、復元方法があれば、ぜひ教えてください。