Sử dụng C#, tôi cần đọc tệp nhị phân được đóng gói được tạo bằng FORTRAN. Các tập tin được lưu trữ trong một định dạng "không định dạng tuần tự" như mô tả ở đây (khoảng một nửa chiều xuống trang trong "không định dạng tuần tự Files" mục):phân tích nội dung khỏi cấu trúc trong tệp nhị phân
http://www.tacc.utexas.edu/services/userguides/intel8/fc/f_ug1/pggfmsp.htm
Như bạn có thể nhìn thấy từ URL, tập tin được tổ chức thành "khối" của 130 byte hoặc ít hơn và bao gồm 2 byte dài (chèn bởi trình biên dịch FORTRAN) xung quanh mỗi đoạn.
Vì vậy, tôi cần tìm một cách hiệu quả để phân tích cú pháp tải tệp thực tế khỏi định dạng do trình biên dịch chèn vào.
Khi tôi đã trích xuất tải trọng thực tế từ tệp, tôi sẽ cần phải phân tích cú pháp nó thành các loại dữ liệu khác nhau của nó. Đó sẽ là bài tập tiếp theo.
Suy nghĩ đầu tiên của tôi là phải lật toàn bộ tệp vào một mảng byte bằng cách sử dụng File.ReadAllBytes
. Sau đó, chỉ cần lặp qua các byte, bỏ qua định dạng và chuyển dữ liệu thực tế sang mảng byte thứ hai.
Cuối cùng, mảng byte thứ hai đó phải chứa nội dung tệp thực sự trừ đi tất cả định dạng mà sau đó tôi cần quay lại để có được những gì tôi cần.
Vì tôi khá mới đối với C#, tôi nghĩ có thể có cách tốt hơn, được chấp nhận hơn để giải quyết vấn đề này.
Ngoài ra, trong trường hợp nó rất hữu ích, những tập tin này có thể là khá lớn (nói 30MB), mặc dù hầu hết sẽ nhỏ hơn nhiều ...
Cảm ơn. Dựa trên các ý kiến của bạn, tôi đã viết một số mã tải tệp của tôi vào một mảng byte và tạo ra một mảng byte thứ hai, sạch (không có các dấu hiệu độ dài).Bây giờ tôi đang cố gắng phân tích nó thành các giá trị vô hướng khác nhau bằng cách sử dụng BitConverter, mặc dù nó có vẻ hơi xấu xí vì tôi cần phải duy trì con trỏ của riêng mình vào mảng khi tôi chuyển đổi nó. Giả sử tôi tiếp tục với mảng byte, có cách nào tốt hơn để có được các vô hướng khác nhau từ nó? Ồ, và tôi không sử dụng 4.0 ... –
Có thể bọc mảng byte vào một 'MemoryStream' và sử dụng một' BinaryReader'. 'BinaryReader' nhớ vị trí riêng của nó, do đó bạn không cần. –