Forum: PC-Programmierung Text mit Steuerzeichen speichern ( in C)


von Samir (Gast)


Lesenswert?

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
von Peter II (Gast)


Lesenswert?

Samir schrieb:
> mit einfügen von \n\r funktioniert leider nicht.

sollte es aber

von Samir (Gast)


Lesenswert?

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?

von Detlev T. (detlevt)


Lesenswert?

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!

von WLADITROLLO (Gast)


Lesenswert?

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.

von Hmm (Gast)


Lesenswert?

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.

von Samir (Gast)


Lesenswert?

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.

von Hmm (Gast)


Lesenswert?

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?

von Samir (Gast)


Angehängte Dateien:

Lesenswert?

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.

von amateur (Gast)


Lesenswert?

Was ist mit der Möglichkeit von "xxxxx\\n"

von Samir (Gast)


Lesenswert?

Schon probiert. Leider geht nicht.
Ausgabe: xxxxxx\\n

von Hmm (Gast)


Lesenswert?

>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.

von Coder (Gast)


Lesenswert?

Du liest die Datei bis zum EOF.

von Samir (Gast)


Lesenswert?

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?

von Samir (Gast)


Lesenswert?

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  ........

von amateur (Gast)


Lesenswert?

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.

???????????????

von Reinhard Kern (Gast)


Lesenswert?

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

von Mark B. (markbrandis)


Lesenswert?

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
}

von Mark B. (markbrandis)


Lesenswert?

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);

von Samir (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.