Hallo liebe Freunde, ich möchte einen langen Text samt Steuerzeichen in einer Zeichenkette speichern und abrufen können. char * Text= "Dies ist ein ganz langer Text1 hier soll ein carriage return" "Dies ist ein ganz langer Text2 hier soll ein carriage return" "Dies ist ein ganz langer Text3 hier soll ein carriage return"; mit einfügen von \n\r funktioniert leider nicht. Hat jemand eine Idee. Danke
:
Verschoben durch User
Danke für die rasche Antwort. Aber: \n\r werden als druckbare Zeichen vom Compiler interpretiert also als Teil der Zeichenkette behandelt. Hab schon probiert. andere Idee?
Samir schrieb: > ich möchte einen langen Text samt Steuerzeichen in einer > Zeichenkette speichern und abrufen Samir schrieb: > vom Compiler interpretiert also als > Teil > der Zeichenkette behandelt. Wo ist hier das Problem? Genau das willst du doch!
Der OP kann sich leider nicht gut ausdrücken. Vielleicht will er, wie oben schon erwähnt, z. B. "Test bla bla bla \r\nZeile 2....." oder vielleicht will er eben sowas: "Test bla bla bla \\r\\n".... Man weiss es nicht.
Ich würde bei solchen Fragen auf gar keinen Fall 1. den Compiler nennen. 2. die empfangende Gegenstelle nennen 3. beschreiben wie Du "\n\r werden als druckbare Zeichen vom Compiler interpretiert also als Teil" feststellst. Das Fernsehprogramm ist sowieso Schei... und wenn Du es geschickt anstellst können wir hier noch mindesten zwei Tage herumraten ohne zu einer Lösung zu kommen.
Ein Missverständnis: Compiler: Builder 6 ich hab es so probiert: char * Text= "Dies ist ein ganz langer Text1\n\r" "Dies ist ein ganz langer Text2 \n\r" "Dies ist ein ganz langer Text3 \n\r"; MemoTCPSend->SetTextBuf(Text); ich will nicht die Steuerzeichen(TAB CR LF) manuel in der Zeichenkette reinpatchen!! Ausgabe: Dies ist ein ganz langer Text1\n\rDies ist ein ganz langer Text2 \n\rDies ist ein ganz langer Text3 \n\r ich hoffe ihr versteht was ich meine. Danke.
Das Problem ist, das Du in Deiner Frage nicht berücksichtigst wie "\n" und damit '\n' normalerweise repräsentiert wird. D.h. wenn Du eine Frage darüber stellst, musst Du dazu deutlich kennzeichnen was Literale sind und aus welcher Sprachdefinition sie stammen. Wenn Du nun also versuchst, mit "Dies ist ein ganz langer Text1\n\r" kein '\n' in einem String zu erzeugen, dann ist mir und sonst auch keinem klar wie Du darauf kommst, wenn Du C kannst, denn das geht nicht. Es ist gerade die Definition eines ASCII-Linefeed das es als Zeichenliteral in C eben als '\n' bzw. in Strings "\n" geschrieben wird. Wenn Du was anderes willst kannst Du Dich entweder an die C-Konvention von Literalen halten. Dann tue das auch oder Du nutzt eine andere Konvention, dann musst Du die auch nennen oder beschreiben. Sonst wissen wir nicht ob das was Du schreibst, das Ding selbst ist oder eine Beschreibung davon. Klar? Also pass auf. Das steht zwar alles in einem C-Buch aber ich schreib es mal kurz. Der String "\n" besteht aus einem ASCII-Linefeed. Der String "\\n" besteht aus einem Backslash und einem 'n'. Was davon willst Du nun?
Danke Hmm, Stell Dir vor Du hast eine Datei die 3 Zeilen enthält. Jede Zeile ist mit 0x0D 0x0A getrennt (siehe Anhang). Wie kriege ich alle Zeichen der Datei (samt CR und LF) in einem Array ohne das Reinpatchen der CR und LF. Wohlgemerkt ich verwende kein printf.
>Stell Dir vor Du hast eine Datei die 3 Zeilen enthält.
Warum soll ich mir das vorstellen? Was hilft mir das bei Deiner
Ausgangsfrage, wie eine String-Variable initialisiert wird?
Warum wechselst Du das Thema? Warum nun eine Datei einlesen? Ist das ein
Analogon um ein Problem deutlich zu machen oder die eigentliche
Aufgaben?
Beim nächsten Mal einfach die richtige Frage auf die es Dir ankommt
einfach und eindeutig stellen.
Vorher gründlich über das Thema informieren.
Und: Lies ein C-Buch.
Ein C-Buch hab ich schon gelesen. Danke Aber das Thema ist gleich geblieben. Es geht immer um Text+Steuerzeichen in einem array zu speichern. char * Text= "Dies ist ein ganz langer Text1\n\r" "Dies ist ein ganz langer Text2 \n\r" "Dies ist ein ganz langer Text3 \n\r"; mit \n\r so wie oben steht, geht nicht. (ich verwende kein printf!! (mit printf funzt schon)) Noch eine Idee?
Also nochmal: Die Datei will nicht jedes mal lesen, sondern ich will sie statisch anbinden. Es besteht die Möglichkeit die Datei in C zu exportieren. Dadurch ist sie aber nicht mehr schön lesbar in Quellcode , wegen des Hexacode. static Array[1000]={ <0x..><0x..><0x..>............} D i e s ........
Irgendjemand hat einen "Knoten". Entweder Deine Erklärung oder Dein Compiler. Normalerweise wird eine Zeichenkette: wie "Buchstaben\n\r" in ... 'e' + 'n' + 0x0D + 0x0A gewandelt während wie "Buchstaben\\n\\r" in ... 'e' + 'n' + '\' + 'n' + '\' + 'r' gewandelt. ???????????????
Samir schrieb: > Ausgabe: > Dies ist ein ganz langer Text1\n\r Wer gibt da wie was aus?? Anders gefragt, woher weisst du, dass da NICHT Text + CR + LF steht? Bist du sicher, dass deine Software nicht /n als CR speichert, aber C-konform als /n wieder ausgibt? Gruss Reinhard
Samir schrieb: > Wie kriege ich alle Zeichen der Datei (samt CR und LF) in einem Array Zum Beispiel so:
1 | #include <stdio.h> |
2 | #include <stdlib.h> |
3 | |
4 | // the array shall be large enough to hold the file's content
|
5 | #define ARRAY_SIZE 1000
|
6 | |
7 | int main() |
8 | {
|
9 | unsigned char array[ARRAY_SIZE]; |
10 | int i=0; |
11 | |
12 | FILE *f = fopen("read_to_array.c", "r"); |
13 | if(f==NULL) { printf("Could not open file\n"); exit(-1); } |
14 | |
15 | while( (fscanf(f, "%c", &array[i])) != EOF ) |
16 | {
|
17 | if (i < ARRAY_SIZE-1) i++; |
18 | else break; |
19 | }
|
20 | // terminate the "string"
|
21 | array[i] = '\0'; |
22 | |
23 | printf("Content of the file is:\n%s", array); |
24 | |
25 | fclose(f); |
26 | return 0; |
27 | }
|
Samir schrieb: > Also nochmal: > > Die Datei will nicht jedes mal lesen, sondern ich will sie statisch > anbinden. > Es besteht die Möglichkeit die Datei in C zu exportieren. Dadurch ist > sie aber nicht mehr schön lesbar in Quellcode , wegen des Hexacode. > > static Array[1000]={ <0x..><0x..><0x..>............} > D i e s ........ Wenn schon, dann so:
1 | const char Array[] = "Dies ist die erste Zeile\nDies ist die zweite Zeile"; |
2 | |
3 | printf("Ausdruck des Arrays: %s", Array); |
ich hab folgendes probiert: #include <stdio.h> #include <conio.h> #include <stdlib.h> int main(int argc, char* argv[]) { char Text[]= "Dies ist ein ganz langer Text1\r\n" "Dies ist ein ganz langer Text2 \n\r" "Dies ist ein ganz langer Text3 \r\n"; FILE * pFile; pFile = fopen ( "myfile.txt" , "wb" ); if(pFile) { fwrite (Text , 1 , sizeof(Text) , pFile ); fclose (pFile); } else printf("Datei konnte nicht geöffnet werden \n"); printf("%s",Text); getche(); return 0; } Es legt an der Reihenfolge von \n und \r soll: \r\n. Danke Euch allen für die Hilfe. Gruß
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.