我有一天的日志文件,我需要在matlab中解析和查看.
日志文件如下所示:
LOG_20120509_120002_002.csv
(year)(month)(day)_(hour)(minute)(second)_(log part number)
Run Code Online (Sandbox Code Playgroud)
日志每小时递增一次,但有时秒数是一秒或两秒(每小时),这意味着我需要忽略他们所说的事情loadcsv
.
我还有另一个文件:
LOG_DATA_20120509_120002.csv
Run Code Online (Sandbox Code Playgroud)
其中包含整个小时的数据(不同的数据).
总体目标是:
loop through each day
loop through each hour
read in LOG_DATA for whole hour
loop through each segment
read in LOG for each segment
compile a table of all the data
Run Code Online (Sandbox Code Playgroud)
我想问题是,如果它们不同,我如何忽略当天的会议记录?我怀疑它将循环遍历文件夹中的所有文件,在这种情况下我该怎么做?
我有一个关于C++ 11最佳实践的问题.清除shared_ptr时,我应该使用reset()
没有参数的函数,还是应该设置shared_ptr
为nullptr
?例如:
std::shared_ptr<std::string> foo(new std::string("foo"));
foo.reset();
foo = nullptr;
Run Code Online (Sandbox Code Playgroud)
是否存在任何真正的差异,或者两种方法都存在优势/劣势?
是否可以在Windows cmd行中检查所有网络地址(使用ping或类似地址)以查看哪些网络地址/具有活动设备:
即.做类似以下事情的东西:
for i = 0 to 255
ping 192.168.1.i //Print this
end
Run Code Online (Sandbox Code Playgroud)
这显然是伪代码.我想知道是否有可能在Windows cmd中做这样的事情.如果您不需要批处理文件会很棒,但我知道这是不可能的.
PS.另外请提一下是否有程序要做,但在cmd中这样做会很好.
我在C中的代码编译和正常工作,我想在C++中使用类似的代码:
static const char* aTable[12] = {
[4]="seems",
[6]=" it ",
[8]="works",};
int main(){
printf("%s%s%s", aTable[4],aTable[6],aTable[8]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我把它放在一个.c
文件中,并编译gcc
它的工作原理.但是,如果我把它放在一个.cpp
文件中并用它编译g++
,我会得到以下错误:
test_cpp.cpp:5:3: error: expected identifier before numeric constant
test_cpp.cpp:5:4: error: type '<lambda>' with no linkage used to declare function 'void<lambda>::operator()() const' with linkage [-fpermissive]
test_cpp.cpp: In lambda function: test_cpp.cpp:5:5: error: expected '{' before '=' token
test_cpp.cpp: At global scope: test_cpp.cpp:5:5: warning: lambda expressions only available with
-std=c++0x or -std=gnu++0x [enabled by default]
test_cpp.cpp:5:6: …
Run Code Online (Sandbox Code Playgroud) 我之前已经看过它,但我不记得如何有效地初始化具有相同长度Eigen::Vector
的已知std::vector
长度.这是一个很好的例子:
std::vector<double> v1 = {1.0, 2.0, 3.0};
Eigen::Vector3d v2; // Do I put it like this in here: v2(v1) ?
v2 << v1[0], v1[1], v1[2]; // I know you can do it like this but
// I am sure i have seen a one liner.
Run Code Online (Sandbox Code Playgroud)
我已经仔细阅读了有关高级矩阵初始化的这一页,但没有明确解释执行此操作的方法.
我已经尝试使用.设置调试标志
set
Run Code Online (Sandbox Code Playgroud)
命令,cmake
但我不确定要添加什么.我被告知的事情,DEBUG=true
但到目前为止,我无法找到正确的标志设置.
有没有办法安全,只需用最少数量的case语句来处理角度换行.
当使用角度的特定表示(0-360度或-180-180度(或等效弧度))并且包裹角度时,会发生角度换行.例如,假设您的角度为-170,则减去50度.你在数学上加起来-220但实际上应该是+140度.
显然你可以使用以下方法检查:
if (deg < -180) { 180 - abs(deg + 180); }
Run Code Online (Sandbox Code Playgroud)
或类似的.但首先你需要进行大量的检查,其次如果你换了两次就不行.
这种情况普遍存在的第二种情况是两个角度之间的插值.
例如,假设我的角度为-170度和160度,我想要它们之间的中间位置.一种常见的方法是,ang1 + 0.5(ang2-ang1)
但是在我提供的示例中,当它应该是175时,将导致角度为-5度.
在这些情况下,是否有一种常用的方法来处理角度换行?
我有兴趣讨论用于stringstream
解析具有多种类型的行的方法.我将从查看以下行开始:
"2.832 1.3067 nana 1.678"
Run Code Online (Sandbox Code Playgroud)
现在让我们假设我有一个有多个strings
和的长行doubles
.解决这个问题的显而易见的方法是将字符串标记化,然后检查转换每个字符串.我有兴趣跳过第二步,stringstream
直接使用只找到数字.
我认为解决这个问题的好方法是读取字符串并检查是否failbit
已设置,如果我尝试将字符串解析为double,它将会是这样.
说我有以下代码:
string a("2.832 1.3067 nana 1.678");
stringstream parser;
parser.str(a);
for (int i = 0; i < 4; ++i)
{
double b;
parser >> b;
if (parser.fail())
{
std::cout << "Failed!" << std::endl;
parser.clear();
}
std::cout << b << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
它将打印出以下内容:
2.832
1.3067
Failed!
0
Failed!
0
Run Code Online (Sandbox Code Playgroud)
我没有惊讶它没有解析一个字符串,但内部发生了什么,以至于它无法清除它failbit
并解析下一个数字?
想象一下,我有两个数组:
a = [1, 2, 5, 7, 6, 9, 8, 3, 4, 7, 0];
b = [5, 9, 6];
Run Code Online (Sandbox Code Playgroud)
我想在a(只有第一个命中)中找到b值的索引,即:
c = [3, 6, 5];
Run Code Online (Sandbox Code Playgroud)
有没有一个简单的Matlab原生方式来做这个没有循环和搜索.
我试过用find():
find(a == b)
Run Code Online (Sandbox Code Playgroud)
如果你这样做会有效:
for i = 1:length(b)
index = find(a == b(i));
c = [c, index(1)]
end
Run Code Online (Sandbox Code Playgroud)
但是它比这更容易理想.