2016-03-19 18 views
2

virgülle ondalık ayırıcı ile txt dosyası oku: ""Ben gibi bir txt dosyası var MATLAB

yerine ondalık ayırıcı olarak "" dir
1,6 2 6,5 5 ... // ~ 1000 columns 
0 1 4 2,5 ... 
... // ~1000 rows 

nasıl gibi çıkışa düzgün MATLAB'da bu okumayı: Bunu yapmanın kolay bir yerleşik yolu yoktur

1.6 2 6 5 ... 
0 1 4 2.5 ... 
... 

cevap

1

(şaşırtıcı!). Tüm dosyada okumak, sonra bir dize değiştirme yapmak ve sonra sonucu sayılara dönüştürmek isteyeceksiniz.

% Read file in as a series of strings 
fid = fopen('data.txt', 'rb'); 
strings = textscan(fid, '%s', 'Delimiter', ''); 
fclose(fid); 

% Replace all commas with decimal points 
decimal_strings = regexprep(strings{1}, ',', '.'); 

% Convert to doubles and join all rows together 
data = cellfun(@str2num, decimal_strings, 'uni', 0); 
data = cat(1, data{:}); 
+0

Bu, birçok (ABD dışı) ülkenin varsayılan ondalık ayırıcısıdır. – Adriaan

+0

@Adriaan Bildiğim kadarıyla değil. Virgüller de genellikle sınırlayıcı olarak kullanıldığından biraz zor olabilir. Birçok programın UI tarafında ondalık ayırıcılar kullanılsalar bile, çoğu ihraç edilen verinin aslında (Excel hariç) süreleri kullandığını düşünüyorum. – Suever

+1

Yea, Excel, sistem ayarlarınız ne olursa olsun kullanır. Ve bu, yerel ayar değil, dil anlamına gelir. Aslında popoda ağrı. Bunun bir başka çözümü de, Excel'e yüklemek ve dönüştürmek için diyalogdaki üç düğmeyi tıklamak, ancak yine de Excel'i kullanmak isteyen bir başka çözüm. Çözümünün iyi bir şey olduğunu söyleyebilirim. – Adriaan

0

this MathWorks Central thread önerdiği hızlı bir yolu strrep kullanmaktır: dizeleri, daha sonra noktalı virgül yerine ve çiftlerde gitmek için str2num kullandıkça

data=strrep(data,'.',',') 

Yani ilk veri okumak.

0

Başka bir olasılık, virgüllerinizi dosyanızdaki dönemlerle değiştirmektir, ardından yeni dosyayı MATLAB'a yükleyin.

Linux veya Mac, biz sed veya tr UNIX yardımcı programlarını kullanabilirsiniz: Windows'ta

$ cat file.dat | tr ',' '.' > file2.dat 

, biz PowerShell kullanabilirsiniz:

PS> gc file.dat | % { $_ -replace ',', '.' } | sc -encoding ascii file2.dat 

Eitherway, biz MATLAB'da yeni bir dosya yükleyebilir aşağıdaki gibi olduğu gibidir:

>> load -ascii file2.dat 
>> disp(file2) 
    1.6000 2.0000 6.5000 5.0000 
     0 1.0000 4.0000 2.5000 
İlgili konular