Hallo
ich brauche bitte Ihre Hilfe um mein Projekt weiterzumachen.
in der Datei test.txt sind folgende Datenframe mit der Größe 256 Byte
gespeichert 01 AA FF AB ... .
Ich muss alle Zeile der test.txt nacheinander lesen und in einer
Variable char cmd[] = {0x01, 0xAA, 0xFF, 0xAB,...} und über RS422 zu
übertragen.
nachdem ich die Datei geöffnet habe, lese ich die erste Zeile mit
getline und speichere in cmd aber als String. Wie kann ich es jetzt in
der form char cmd[] = {......} haben.
1
intmain(void){
2
FILE*datei;
3
//char array1[] = {0xAB, 0x02, 0x03, 0x05};
4
//char array[] = "AB 02 03 05";
5
//char adr_len[2];
6
//char a = 'A';
7
8
//printf("%s\n", array1);
9
//printf("interger von A: %X\n", (int)a);
10
//fprintf(stdout, "%x\n", array1[0]);
11
//fprintf(stdout, "0x%2X\n", array1[0]);
12
//fprintf(stdout, "%d\n", array1[0]);
13
14
15
char*cmd;
16
intreaded,i;
17
size_t*t=malloc(0);
18
char*cmd1="0x";
19
char**gptr=malloc(sizeof(char*));
20
*gptr=NULL;
21
22
datei=fopen("test.txt","r");
23
if(NULL==datei){
24
fprintf(stderr,"Konnte Datei \"test.txt\" nicht öffnen! : %s\n",strerror(errno));
Sehr geehrter Herr Nguembou,
danke für Ihre Anfrage. Es bietet sich an, hier byteweise vorzugehen.
Ein zeilenweises Einlesen ist nicht vorteilhaft. Gerne übermittle ich
Ihnen anbei einen beispielhaften Sourcecode.
Danke für die Antwort. Der Code liest die ganze Datei aus, obwohl ich
erst eine Zeile lesen und verarbeiten will, bevor ich zu der nächsten
Zeile gehe.
Aber danke für die Hilfe ich kann damit schon die korrekte HEX-zahl
haben. ich versuche daran nochmal zu arbeiten.
Frage: die Funktion fread liest das Leerzeichen auch als newline?
Und warum willst du nicht erst die komplette Datei einlesen und
anschließend übetragen, ausgeben, wasauchimmer?
Aus deinem Text geht auch nicht hervor, wie genau die Datei aussieht.
Sind die Zahlen als Text dadrin gespeichert? Falls ja, wieso? Falls
nein, was hat das dann mit zeilenweisem Einlesen zu tun?
jz23 schrieb:> Und warum willst du nicht erst die komplette Datei einlesen und> anschließend übetragen, ausgeben, wasauchimmer?
Die Datei besteht aus mehrere Zeilen und jede Zeile enthält ein Kommando
mit Parametern und Adresse der anzusprechenden Karte. Aus diesem Grund
muss die Übertragung Zeile für Zeile erfolgen.
> Aus deinem Text geht auch nicht hervor, wie genau die Datei aussieht.> Sind die Zahlen als Text dadrin gespeichert? Falls ja, wieso? Falls> nein, was hat das dann mit zeilenweisem Einlesen zu tun?
Bsp Inhalt der Datei test.txt
AA 10 03 FF AB DC
AB 10 03 FF AB DC
EA 10 03 FF AB DC
FA 17 43 FF AB DC
AA 11 23 FF AB DC
...
Steve N. schrieb:> An dieser Stelle kann mann nicht mit der cmd[] arbeiten, da nach der> for-Schleife das Programm zu der Marke out springt.
Das sollte nur nach den letzten 256 Byte der Fall sein, das Programm
lässt sich aber natürlich beliebig anpassen.
Steve N. schrieb:> Aus diesem Grund> muss die Übertragung Zeile für Zeile erfolgen.
Wenn jede Zeile genau 256 Oktets hat die mit einem Leerzeichen getrennt
ist, sollte es ja funktionieren. Eine ganze Zeile einzulesen ist immer
komplizierter, weil du vorher nicht weißt wie lang sie ist.
Ein wenig Neugierde kann nicht schaden:
1. Hast Du, zwecks besserer Lesbarkeit, z. B. zwischen "AA" und "10"
ein Leerzeichen eingefügt, oder sind die wirklich vorhanden?
2. Was folgt auf "DC"? Ein Leerzeichen, ein Return oder von Kleinweich
ein CR/LF?
Kann nicht schaden das zu wissen.
Felix U. schrieb:> Das sollte nur nach den letzten 256 Byte der Fall sein, das Programm> lässt sich aber natürlich beliebig anpassen.> Wenn jede Zeile genau 256 Oktets hat die mit einem Leerzeichen getrennt> ist, sollte es ja funktionieren. Eine ganze Zeile einzulesen ist immer> komplizierter, weil du vorher nicht weißt wie lang sie ist.
Stimmt danke ich habe es schon geschafft zeilenweise zu lesen und zu
übertragen. es klappt 1 zu 1:)
Amateur schrieb:> Ein wenig Neugierde kann nicht schaden:> 1. Hast Du, zwecks besserer Lesbarkeit, z. B. zwischen "AA" und "10"> ein Leerzeichen eingefügt, oder sind die wirklich vorhanden?
Nein es sieht genau so aus. Zwischen jede Hex gibt's ein Leerzeichen.
> 2. Was folgt auf "DC"? Ein Leerzeichen, ein Return oder von Kleinweich> ein CR/LF?>> Kann nicht schaden das zu wissen.
nach dem "DC" folgt ein LF.