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

Gast #3843536
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.