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.
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
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."
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.
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] |
:
Bearbeitet durch Moderator
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.