2011-06-30 36 views
5

Tôi đang cố gắng gửi mảng có kích thước [2 x N] gấp đôi tệp văn bản lớn bằng lệnh fprintf(). Tôi gặp sự cố trong đó fprintf() không nhận ra lệnh dòng mới (\n) hoặc lệnh trả về vận chuyển (\r). Mã tôi đang sử dụng làfprintf không in dòng mới

fid = fopen([Image.Dir,'CtlPts_',Image.Files{k},'.txt'],'w'); 
fprintf(fid,'%.4f\t%.4f\n',control_points{k}); 
fclose(fid); 

nơi dữ liệu tôi đang cố gắng in nằm trong ô control_points{k}.

Tab được in tốt, nhưng mọi thứ trong tệp văn bản được in trên một dòng, vì vậy đây là lý do tại sao tôi giả định rằng nó bỏ qua ký tự dòng mới của tôi.

Có điều gì sai với cú pháp của tôi mà tôi không thấy?

+2

bạn đã hoàn thành một tệp của tệp chưa? Tôi biết rằng trên nhiều hệ thống, \ n là không đủ để tạo ra những gì bạn đang yêu cầu (và như vậy, có thể bạn phải làm \ r \ n) – KevinDTimm

+0

@KevinDTimm Tôi không chắc chắn về việc tạo một tập tin là gì (bạn có thể giải thích trong một định dạng câu trả lời) nhưng sử dụng \ r \ n làm việc. Đăng câu trả lời này và tôi sẽ chọn câu trả lời. –

+0

lý do cho kết xuất là để xác minh rằng tệp thực sự chứa \ n. Nếu nó (có khả năng) thì phần thứ hai của bình luận/câu trả lời của tôi sẽ được áp dụng. – KevinDTimm

Trả lời

9

Tôi biết rằng trên nhiều hệ thống, \ n là không đủ để tạo ra những gì bạn đang yêu cầu cho (và do đó, có thể bạn phải làm \ r \ n)

+0

'\ r \ n' thực sự chỉ áp dụng cho Windows, hầu hết các nền tảng khác sử dụng' \ n'. –

+0

@RemyLebeau - Và có vẻ như đây là giải pháp cho vấn đề – KevinDTimm

8

Một giải pháp khác là open file trong chế độ văn bản, cách mà MATLAB sẽ tự động chèn một trở về vận chuyển \r trước khi bất kỳ \n ký tự xuống dòng trong đầu ra trên các hệ thống Windows:

fid = fopen('file.txt', 'wt'); 
fprintf(fid, '%f\t%f\n', rand(10,2)); 
fclose(fid); 

Lưu ý rằng đây là phần nào không cần thiết, vì hầu hết các biên tập viên (với ngoại lệ của Microsoft Notepad) nhận dạng U nix/Mac/Windows dòng kết thúc.

Các vấn đề liên quan