Tôi đã có một số mã để đọc một tệp văn bản bằng cách sử dụng fscanf()
và bây giờ tôi cần nó được sửa đổi để các trường trước đây không cần khoảng trắng cần cho phép khoảng trắng. Các tập tin văn bản về cơ bản là theo hình thức:Có thể fscanf() đọc khoảng trắng không?
tiêu đề: DATA
tiêu đề: DATA
vv ...
đó là cơ bản phân tích cú pháp sử dụng fgets(inputLine, 512, inputFile); sscanf(inputLine, "%*s %s", &data);
, đọc các lĩnh vực DATA và bỏ qua các tiêu đề, nhưng bây giờ một số trường dữ liệu cần cho phép các khoảng trống. Tôi vẫn cần phải bỏ qua tiêu đề và khoảng trống ngay lập tức sau nó, nhưng sau đó đọc phần còn lại của dòng bao gồm khoảng trắng.
Có cách nào để thực hiện việc này với chức năng sscanf()
không?
Nếu không, thay đổi nhỏ nhất mà tôi có thể thực hiện cho mã để xử lý khoảng trắng chính xác là gì?
CẬP NHẬT: Tôi đã chỉnh sửa câu hỏi để thay thế fscanf() bằng fgets() + sscanf(), mã của tôi thực sự đang sử dụng. Tôi đã không thực sự nghĩ rằng nó có liên quan khi tôi lần đầu tiên đã viết câu hỏi đó là lý do tại sao tôi đơn giản hóa nó để fscanf().
Nếu bạn đã từng phân tích cú pháp bằng cách sử dụng 'scanf', thì trước đó bạn cũng có thể phân tích cú pháp một cái gì đó như' tiêu đề: DATA title: DATA' (nghĩa là tất cả trên một dòng). Nếu bạn muốn cho phép khoảng trắng trong các giá trị, thì điều gì sẽ là trình kết thúc? Nếu newline, sau đó có vẻ như mã ban đầu của bạn hơi quá lỏng lẻo ... –
Ngoài ra, làm thế nào để bạn quyết định kích thước của bộ đệm 'str', và làm thế nào để bạn đảm bảo rằng nó không tràn? –
có, khi DATA có thể có khoảng trống dòng mới sẽ được sử dụng làm terminator –