Io 如何在VHDL中读取文件时消除空白

Io 如何在VHDL中读取文件时消除空白,io,vhdl,Io,Vhdl,我在一个要读取的输入文件中有以下数据: 10101100 11010100 10101100 11010100 11111110 10111001 11111110 10111001 我需要读取每个半字节并将它们写入一个数组。但是由于空格的存在,行的长度会发生变化,这会影响while len>0循环。如何在readline之后和read之前消除行中的空白,以便在len变量中获得适当的长度 我正在使用以下代码: while not endfile(f) loop readline(f,

我在一个要读取的输入文件中有以下数据:

10101100 11010100 10101100 11010100

11111110 10111001 11111110 10111001
我需要读取每个半字节并将它们写入一个数组。但是由于空格的存在,行的长度会发生变化,这会影响
while len>0
循环。如何在
readline
之后和
read
之前消除行中的空白,以便在
len
变量中获得适当的长度

我正在使用以下代码:

while not endfile(f) loop
    readline(f, L);
    len := L'length;
    while len > 0 loop
        read(L, b);
        mem(i) <= b;
        i := i + 1;
        len := len - b'length;
    end loop;
end loop;

我花了一些时间测试尾部whileface的边界条件,这需要更改嵌套循环:

        while not endfile(f) loop
            readline(f, L);
            -- len := L'length;
            -- while len >= b'length loop
            while L.all'length >= b'length loop
                read(L, b);
                -- len := L'length;
                mem(i) <= to_stdlogicvector(b);
                i := i + 1;
                -- len := len - b'length;
            end loop;
        end loop;
(记住包装中的声明)

textio嵌套循环条件如下所示:

        -- while L.all'length >= b'length loop
        while L.all'length >= b'length and not iswhitespace(L.all) loop

这使得文件读取不受一行上任何长度的尾随空白的影响。

我花了一些时间测试尾随空白的边界条件,这需要更改嵌套循环:

        while not endfile(f) loop
            readline(f, L);
            -- len := L'length;
            -- while len >= b'length loop
            while L.all'length >= b'length loop
                read(L, b);
                -- len := L'length;
                mem(i) <= to_stdlogicvector(b);
                i := i + 1;
                -- len := len - b'length;
            end loop;
        end loop;
(记住包装中的声明)

textio嵌套循环条件如下所示:

        -- while L.all'length >= b'length loop
        while L.all'length >= b'length and not iswhitespace(L.all) loop

这使得文件读取不受一行中任何长度的尾随空格的影响。

您能保证条目之间有一个空格吗<代码>长度:=len-b'length-1@Brian Drummond,是的,数据位之间要么有一个空格,要么有两个空格(不是都有)。但整个文件中的模式保持不变。@Brian Drummond,len:=len-b'length-1;不起作用,因为迭代次数会减少,并且每行的最后一个半字节会受到影响。啊。我想你读的是字节而不是字节。因此,根据下一个字符的值减去1(或2,或不减去1)。您能保证条目之间有一个空格吗<代码>长度:=len-b'length-1@Brian Drummond,是的,数据位之间要么有一个空格,要么有两个空格(不是都有)。但整个文件中的模式保持不变。@Brian Drummond,len:=len-b'length-1;不起作用,因为迭代次数会减少,并且每行的最后一个半字节会受到影响。啊。我想你读的是字节而不是字节。所以,根据下一个字符的值减去1(或2,或不减去1)。您好,连同上面的答案,我可以知道如何在vhdl中读取时忽略读取的行的前8位吗。例如,如果我有像“011EAE01 0010 0100 1111 1011”这样的数据,我需要只读取忽略前8位(011EAE01)的半字节,并将它们放入内存。我怎么能忽略前8位呢?那不是8位,而是8个字符。创建一个约束为1到8的字符串类型的新读取接收变量。在每个读取行之后,先从L中读取标题,然后再从L中的其余行读取数据。您好,连同上面的答案,我可以知道如何在vhdl中读取时忽略读取行的前8位。例如,如果我有像“011EAE01 0010 0100 1111 1011”这样的数据,我需要只读取忽略前8位(011EAE01)的半字节,并将它们放入内存。我怎么能忽略前8位呢?那不是8位,而是8个字符。创建一个约束为1到8的字符串类型的新读取接收变量。在每个读取行之后,从L中读取标题,然后再从L中的其余行读取数据。