2013-06-20 2 views
0

У меня есть файл exif, который я хочу читать и записывать в файл csv.Чтение и запись текстового файла

Это всего лишь образец файла, настоящий, слишком сложный и длинный.

---- File ---- 
File Name      : IMG_5547.JPG 
Directory      : . 
File Size      : 3.1 MB 
File Modification Date/Time  : 2013:05:27 18:10:31+02:00 
File Access Date/Time   : 2013:06:19 13:53:37+02:00 
File Creation Date/Time   : 2013:06:19 13:53:37+02:00 
File Permissions    : rw-rw-rw- 
File Type      : JPEG 
MIME Type      : image/jpeg 
Exif Byte Order     : Little-endian (Intel, II) 
Image Width      : 4000 
Image Height     : 3000 
Encoding Process    : Baseline DCT, Huffman coding 
Bits Per Sample     : 8 
Color Components    : 3 
Y Cb Cr Sub Sampling   : YCbCr4:2:2 (2 1 
...... 
....... 
....... 

'muster.txt'

File Name      : IMG_5547.JPG 
GPS Time Stamp     : 08:52:21 
GPS Latitude     : 52.419358° 
GPS Longitude     : 9.652666° 
GPS Altitude     : 140.1 m 

% Чтение файла

fid = fopen('muster.txt','r'); 

filename_ = fgetl(fid); 
Skip2_ = fgetl(fid); // **HOW CAN I SKIP MORE THAN ONE LINE ?????** 
GPS_Latitude =fgetl(fid); 
GPS_Longitude =fgetl(fid); 
GPS_Altitude =fgetl(fid); 
fclose(fid); 

% Wrting в CSV файл

% Вывод должен быть, как это

% sample_out.csv

IMG_5547 52.419358 9.652666 140.1 

Интересно, как я могу получить необходимые значения из ('filename_,' GPS Широта», 'GPS_Longitude', 'GPS_Altitude') и запись в файл CSV

+0

Предлагаю прочитать ввод с помощью ['textscan'] (http://www.mathworks.com/help/matlab/ref/textscan.html), и вы используете [' regexp'] (http: // www .mathworks.com/help/matlab/ref/regexp.html), чтобы выделить нужные значения. Просто рассматривайте все как строки, вам не нужно ничего конвертировать в реальные числа. Здесь есть много ответов, которые показывают, как это сделать. –

+0

Если файл есть все, что мы видим, он может даже жестко кодировать левый столбец и включать '\ n' в формат' textscan', чтобы получить все, что ему нужно, одним выстрелом без 'regexp'. – Oleg

+0

Его просто образец файла. – Shahgee

ответ

1

Вот как бы я атаковать эту проблему:

% read in the file and convert to array of characters 
fid = fopen('muster.txt'); 
A = char(fread(fid))'; 
fclose(A); 
% create a cell array of strings for each line in the file 
fileLines = regexp(A,'\n','split'); 
% use the ' : ' as a kind of delimiter between the field name 
% and the data 
toks = regexp(fileLines,'\s+:\s+','split'); 
% create a structure to hold the data, and fill it 
data = struct(); 
for ii=1:length(toks) 
    currTok = toks{ii}; 
    data.(char(regexprep(currTok{1},'\s+',''))) = char(regexprep(currTok{2},'\s+','')); 
end 
% write the csv file 
fid = fopen('sample_out.csv','w'); 
fprintf(fid,'%s %s %s %s %s\n,...data.FileName, ... 
           data.GPSTimeStamp, ... 
           data.GPSLatitude, ... 
           data.GPSLongitude,data.GPSAltitude); 
fclose(fid); 

Конечно, есть более эффективные способы, но учитывая постановку задачи, я хотел бы начать здесь.

HTH!

Смежные вопросы