
No.5ベストアンサー
- 回答日時:
問題点、理解できました。
.NET では、1文字==2バイトですから、1バイトにマッチする正規表現というのはありえません。
また、バイナリデータを string に読み込むと、指定した encoding によっては変換されるため、ファイル中で 100 バイトだったデータが、string で 100 文字になるとは限りません。したがって、Regex.Replace や Substring でバイナリデータの部分を捨てることもできません。
結局のところ、いったん string に読み込んでしまったら、どうにもならない、ということです。ファイルから読み込む時点で、バイナリデータの部分をスキップするのが妥当な方法でしょう。以下は例です。
using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
class ReadData {
static void Main() {
char [] buf;
FileStream fs = new FileStream("data.dat", FileMode.Open);
Encoding enc = Encoding.GetEncoding("shift-jis");
BinaryReader br = new BinaryReader(fs, enc);
br.BaseStream.Seek(100, SeekOrigin.Begin); // 100 バイトスキップ
buf = br.ReadChars((int)(br.BaseStream.Length-br.BaseStream.Position));
br.Close();
string str = new string(buf);// string に変換する必要があれば
Console.WriteLine(str);
}
}
No.4
- 回答日時:
まず根本的な話なのですが、「先頭の100バイト」とはどのような意味でしょうか。
.NET では文字コードは UNICODE ですから、とりあえずサロゲートペアを度外視すれば、1文字==2バイトです。したがって、馬鹿正直に解釈すれば、「先頭の100バイト」は「先頭の50文字」という意味になります。もしそうなら、Regex.Replace(Buffer,"^[\u0000-\uffff]{50}","",RegexOptions.Singleline)
あるいは、単純に
Regex.Replace(Buffer,"^.{50}","",RegexOptions.Singleline)
となります。しかし、わざわざ Regex を使わなくても、
Buffer.Substring(50)
で目的は達せられます。
もし、Buffer の中身が Shift-JIS コードだと考え、いわゆる半角文字==1バイト、いわゆる全角文字==2バイトとして、「先頭100バイト」と言っておられるのなら、No.1 さんの方法で Shift-JIS に変換しなければなりません(Encoding に Shift-JIS が指定できるとしての話ですが)。
その場合、100バイト目に2バイト文字の1バイト目が来てしまったときの処理をしなければならないので、単純には行かないと思います。
この回答への補足
馬鹿正直に100バイトです。
説明し忘れましたが、バイナリファイル「っぽい」ファイルを開いていまして、Shift-jisの文字列の前に、正体不明のバイナリ値が100バイトあるのです。
というわけで、提示いただいた正規表現は使えません。
というより、正規表現では無理なのかな?
No.1
- 回答日時:
本当に100バイトずつ削除したいなら、いったんGetByes()で、バイト配列に変換してから、操作してみては。
参考URL:http://www.microsoft.com/japan/msdn/library/ja/c …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- オープンソース csvデータのダブルクォーテーションで囲まれた文字内にあるカンマを削除したい 3 2022/09/02 15:17
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
- その他(コンピューター・テクノロジー) 正規表現の置換で一部の文字列をそのまま残したい 2 2022/05/03 19:19
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- フリーソフト サクラエディタの正規表現(grep機能)の使い方 3 2022/06/22 10:29
- Access(アクセス) AccessVBAで任意の複数リンクテーブルをAccessVBAを動かす際に削除したいと考えておりま 1 2022/11/17 15:45
- PostgreSQL 数値が定期的にあらわれる文字列から、いくつめに出現した数値が指定して切り出したい 1 2023/06/08 13:12
- その他(プログラミング・Web制作) VB.NETの正規表現について 4 2022/04/12 16:54
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Windows 10 Windowsのバッチファイルで正規表現の置換方法について… 4 2022/12/09 16:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
char str[256]の256の意味は?
-
バイト列とバイナリ列の違いが...
-
VBAでShift-JISのURLエンコード
-
エクセルシート名の制限を変更...
-
機種依存文字の変換について
-
【VB2005】テキストボックス内...
-
ビットからバイトへの変換
-
この関数はどのプログラミング...
-
windowsのファイルパス最大文字数
-
COBOLのCOMP形式について
-
ビットスワップとバイトスワッ...
-
ワイド文字のバイト数が取得で...
-
Console.writeLineで文字化け
-
機種依存文字をチェックしたい。
-
GetWindowTextでアドレスバーか...
-
memcmp バイナリデータの比較方法
-
最大長を用意せずにバイナリデ...
-
HDMLのcgi呼び出し時について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
エクセルシート名の制限を変更...
-
char str[256]の256の意味は?
-
バイト列とバイナリ列の違いが...
-
ピクセル,dpiから容量(バイト...
-
C++ Builderで文字列をバイトに...
-
Javaで日本語1文字のバイト数
-
ビットスワップとバイトスワッ...
-
SQLで1バイト、2バイト混在...
-
バイナリとBCDコード
-
URLは最高何文字まで可能なので...
-
機種依存文字をチェックしたい。
-
VBAでShift-JISのURLエンコード
-
COBOL PICTUREで X,S,Vの意味
-
memcmp バイナリデータの比較方法
-
pythonでバイナリデータを配列...
-
64bit対応
-
3バイト文字(UTF-8)をprintfで...
おすすめ情報