Einlesen Zeile i, Spalte j mittels Read_File() (VHDL)

Gast #3843536
Lesenswert?

Guten Tag.

Ich möchte einen Datensatz aus einer Textdatei einlesen. Dazu habe ich 
mich am folgendem Beispiel orientiert: 
http://www.stefanvhdl.com/vhdl/html/file_read.html. Funktioniert gut. 
Nun meine Frage: Ich habe eine Textdatei, welche n Zeilen und m Spalten 
enthält. Wie lese ich den Wert der i-ten Zeile und j-ten Spalte ein? Das 
Beispiel lässt (so sehe ich das) nur das Einlesen einer ganzen Zeile zu. 
Danke euch.
Gast #3843591
Lesenswert?

Einsteiger schrieb:
> Wie lese ich den Wert der i-ten Zeile und j-ten Spalte ein? Das
> Beispiel lässt (so sehe ich das) nur das Einlesen einer ganzen Zeile zu.
File-IO und Zeichenkettenverarbeitung ist ja (leider) nicht so die große 
Stärke von VHDL.
Ich würde die Zeile(i) am Stück einlesen und dort das Zeichen an der 
gwünschten Position(j) suchen.

Duke
Gast #3843603
Lesenswert?

Danke dir Duke. Mein File sieht z.B. wie folgt aus:

01011    01000
00010    00011

Die Spalten werden durch ein Tab (ht) getrennt. Wie sehe dein Vorschlag 
umgesetzt aus (für das Element 2te Zeile 2te Spalte)?  Ich meine den 
Teil des "Zeichen(s) an der gwünschten Position(j) suchen."
Gast #3844503
Lesenswert?

FileIO liest eine ganze Zeile in einen String,
von dem kann dann elementeweise in Integer etc.
umgewandelt werden, wie z.B.:

process
  ...
  file     textfile : text;
  variable numbers  : line;
  variable number1  : integer;
  variable number2  : integer;
  ...
begin
  ...
  readline(textfile,numbers);
  ...
  read(numbers,number1);
  read(numbers,number2);
  ...
end process;

"number1" und "number2" enthalten dann die
entspr. Werte. "read" konsumiert sozusagen
die Werte, d.h. kürzt den String "numbers"
bei jedem Zugriff.
Gast #3888517
Lesenswert?

Danke Sigi. Eine Spalte funktioniert. Mehrere nicht. Das Format sieht 
wie folgt aus:

string_spalte_1 Leerzeichen string_spalte_2

Habe es wie folgt versucht:
1
begin
2

3
receive_data: process
4

5
variable l  : line;
6
variable s_1: string(1 to word_width);
7
variable s_2: string(word_width+2 to 2*word_width+2); 
8
   
9
begin                                       
10

11
   EOG <= '0';
12
   wait until RST='1';
13
   wait until RST='0';
14

15
   while not endfile(stimulus) loop
16

17
     readline(stimulus, l);
18
    read(l, s_1);
19
    read(l, s_2);
20
    
21
     Y_1 <= to_std_logic_vector(s_1);
22
     Y_2 <= to_std_logic_vector(s_2);
23
    
24
     wait until CLK = '1';
25

26
   end loop;
27
   
28
   print("I@FILE_READ: reached end of "& stim_file);
29
   EOG <= '1';
30
   wait;
31
 end process receive_data;

----------------------------------------------------------------
Mod: bitte in Zukunft die VHDL-Tokens verwenden:
1
[vhdl]
2
  VHDL Code
3
[/vhdl]

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren