我正在尝试在 SystemVerilog 中读取 CSV 文件并解析它们并将值分配给关联数组。我想在阅读时跳过 CSV 文件的第一行。我正在使用以下任务将文件读入 SystemVerilog:
while (!$feof(file)) begin
$fscanf(file, "%s\n", line);
for (i = 0; i < line.len(); i++) begin
if (line[i] == ",") begin
break;
end
end
if (i != line.len()) begin
register_name = line.substr(0, i-1);
exp_value = line.substr(i + 1, line.len() - 1);
end else begin
$display("Error: The line format is not readable. Line: %s. Please check it", line);
end
if (exp_value.len() > 0) begin
$sscanf(exp_value, "%h", value);
end else begin
$display("Error: Value is not able to be read. Line: %s, Value: %h. Please check it", line, exp_value);
end
Temp_Arr.name = register_name;
Temp_Arr.value = value;
RegData[register_name] = Temp_Arr;
end
我尝试在
while
循环之前使用“fscanf()”函数,希望它能跳过第一行,但它不起作用。
输入文件的内容是这样的:
Register Name,Expected Value
Reg_1,0abd4
Reg_2,4eec3
...
我想在解析文件时跳过标题行。请建议如何解决此问题。
由于您不需要像处理以下行那样设置标题行的格式,因此请在
$fgets
循环之前使用 $fscanf
而不是 while
:
$fgets(line, file);
while (!$feof(file)) begin
请参阅 IEEE Std 1800-2017,第 21.3.4.2 节 一次读取一行 :
可以使用
从文件中读取一行。$fgets
关于您的问题:
我尝试在 while 循环之前使用“fscanf()”函数希望它 将跳过第一行
您没有显示您尝试过的代码,但如果您在循环之前使用与循环内相同的
$fscan
行,则它将不起作用,因为格式字符串 ("%s\n"
) 与标题行不匹配。