我想它并不那么困难,但我真的被卡住了。 我有一些文件,用9个数字的字符串命名,如:
-Dlog4j.configurationFile=file:///var/lib/tomcat7/log4j.xml
每个文件都标识一个测量站,并包含一个包含两列003485295.lst
005847283.lst
092348235.lst
...
和date
的表,由空格字符分隔。例如,value
是:
003485295.lst
有些日期在所有文件(电台)中很常见,但有些日期不是。
我选择了一个特定的日期,比如date value //header row here!
2014-01-03-07:00-00 2.2
2014-01-04-07:00-00 3.1
2014-01-05-07:00-00 28.6
2014-01-06-07:00-00 2.5
2014-01-14-07:00-00 5.6
...
。我想:
2014-01-06
; 2014-01-06.txt
个文件; *********.lst
当天是否进行了一些衡量********
; MM.M
(也可以是******** MM.M
或M.M
)。所以期望的输出MMM.M
就像:
2014-01-06.txt
应排除当天没有任何价值的电台。我在Windows上并且手中有003485295 2.5 //as we read in 003485295.lst
001022903 6.4
001022905 6.6
001022907 10.3
001026202 30.6
...
和R
,但也可以使用其他工具。
答案 0 :(得分:0)
我会通过以下方式解决这个问题:
使用read.csv
函数将所有文件上传到R中的单个数据表(您的文件基本上是以空格分隔的CSV,因此这应该相对简单)
按日期对值进行排序
用因子替换日期
按照this等日期因素拆分data.table。
通过data.tables执行for,并使用write.csv
函数
使用DIR
函数(循环文件)通过VBA上传所有文件并阅读每个文件 - 链接here。使用空格上的Split
函数来标记字符串。将所有数据转储到单个工作表
按日期列
编写一个简短的VBA宏,使用this和一段代码将数据转储到单独的文件中:
将文件日期视为字符串 Do Until currDate.Value ="" if fileDate<>然后currDate '创建新文件日期 fileDate = currDate 万一 '将数据转储到文件中 写#fileNo,Cells(currDate.Row,2) 环
在整个练习中,基本上记住文件是space delimited CSVs
,这将有助于获得正确的读写文件的方法。
答案 1 :(得分:0)
这是一个Matlab函数,可以实现这一目标。 (它假设你至少有Matlab R2014b,因为它使用了matlab日期时间。如果没有,你可以使用datenum)。
function result = getDateData(dateToLookup)
% Get a list of all *.lst files
d = dir('*.lst');
result = [];
for i=1:length(d)
% Read in the data file using readtable. Delimiter is space, but need
% to skip the first line because it doesn't follow this pattern
t = readtable(d(i).name, 'FileType', 'text', 'Delimiter', ' ', ...
'HeaderLines', 1, 'ReadVariableNames', false);
t.Properties.VariableNames = {'Date', 'Data'};
% Convert the first column to datetime
t.Date = datetime(t.Date, 'Format', 'yyyy-MM-dd-HH:mm-ss');
% Looks like you want to lookup by date (and not consider
% hours/minutes/seconds, so shift these to start of day)
t.Date = dateshift(t.Date, 'start', 'day');
% Add in the filename to the table (minus the .lst)
t.FileName = repmat({strrep(d(i).name, '.lst', '')}, height(t), 1);
% Append table to the result
result = [result; t]; %#ok<AGROW>
end
% This is the date you're asking for
dt = datetime(dateToLookup);
% Find all of the matches
matches = result(result.Date == dt, :);
% Create a new table as the result and write it out
result = table(matches.FileName, matches.Data, ...
'VariableNames', {'FileName', 'Data'});
writetable(result, 'data.txt', 'Delimiter', ' ');
end