Zum Inhalt springen

Whitspace


Cos

Empfohlene Beiträge

Hallo,

ich habe folgendes Problem.

Ich möchte eine Datei auslesen und die Zeichenfolge zu je 4 oder 2 byte in eine XML-Datei schreiben. doch leider schreibt mir mein Programm nur die Bytes in die XML datei die auch mit einem zeichen versehen sind. Soll heißen das er für ein Leerzeichen in der Quelldatei nichts in der XML-Datei einfügt. Ich brauche aber dieses Leerzeichen. Die Quelldatei hat folgenden Inhalt.

RIFF$k WAVEfmt "V ˆX data k .

Das erste Leerzeichen nach dem ersten Quadrat wird schon nicht mehr geschreieben und nach dem zweiten Quadrat kommt der Fehler

Required white space was missing. Error processing

<RIFF value="RIFF"/><LengthOfFile value="$k

kann mir einer helfen?

Danke

Grüße

Cos

Link zu diesem Kommentar
Auf anderen Seiten teilen

char Buffer[3];

char* pBuffer = Buffer;

ifstream Header("header.dat", ios::in|ios::binary);

ofstream XMLFile("header.xml", ios::out|ios::binary);

// Erste und zweite Zeile schreiben

XMLFile.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n", 39);

XMLFile.write("<RiffWaveHeader>\n", 17);

// RIFF schreiben

Header.read(pBuffer, 4);

XMLFile.write("<RIFF value=\"", 13);

XMLFile.write(pBuffer, 4);

XMLFile.write("\"/>\n", 3);

und das nachste pBuffer enthält das besagte Leerzeichen das mir aber leider nicht mehr dargestellt wird.

Hast du eine Ahnung

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

also ich habe mittlerweile einige Daten in die XML-Datei schreiben können.

Habe den Code auch geändert, das er nun die benötigten Daten in die XML-Datei schreibt. aber jetzt macht er bei folgendem Code Probleme...

char Buffer[4];

char* pBuffer = Buffer;

char str[10] = {'\0'};

unsigned int outxml;

int i;

ifstream Header("header.dat", ios::in|ios::binary);

ofstream XMLFile("header.xml", ios::out|ios::binary);

// Erste und zweite Zeile schreiben

XMLFile.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n", 39);

XMLFile.write("<RiffWaveHeader>\n", 17);

// RIFF schreiben

Header.read(pBuffer, 4);

XMLFile.write("<RIFF value=\"", 13);

XMLFile.write(pBuffer, 4);

XMLFile.write("\"/>\n", 3);

//FileSize schreiben

for (i = 0; i < 10; i++)

str = 0;

Header.read(pBuffer,4);

XMLFile.write("<LengthOfFile value=\"", 21);

outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 + Buffer[0];

outxml +=8;

_itoa(outxml, str, 10);

XMLFile.write(str,10);

XMLFile.write("\"/>\n", 3);

// WAVE schreiben

Header.read(pBuffer, 4);

XMLFile.write("<WAVE value=\"", 13);

XMLFile.write(pBuffer, 4);

XMLFile.write("\"/>\n", 3);

// Format Chunk schreiben

Header.read(pBuffer, 4);

XMLFile.write("<FormatChunk value=\"", 21);

XMLFile.write(pBuffer, 4);

XMLFile.write("\"/>\n", 3);

// ChunkSize schreiben

for (i = 0; i < 10; i++)

str = 0;

Header.read(pBuffer, 4);

XMLFile.write("<ChunkSize value=\"", 18);

outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 + Buffer[0];

_itoa(outxml, str, 10);

XMLFile.write(str,10);

XMLFile.write("\"/>\n", 3);

// Format schreiben

for (i = 0; i < 10; i++)

str = 0;

Header.read(pBuffer, 2);

XMLFile.write("<Format value=\"", 16);

outxml = Buffer[1] * 0x100 + Buffer[0];

_itoa(outxml, str, 10);

XMLFile.write(str,10);

XMLFile.write("\"/>\n", 3);

//Channels schreiben

for (i = 0; i < 10; i++)

str = 0;

Header.read(pBuffer, 2);

XMLFile.write("<Channels value=\"",17);

outxml = Buffer[1] * 0x100 + Buffer[0];

_itoa(outxml, str, 10);

XMLFile.write(str,10);

XMLFile.write("\"/>\n", 3);

//HIER KOMMT DER FEHLER!!! Wenn ich diesen Teil Sample Rate weglasse dann geht die Datei, wenn nicht dann bekomme ich den Error Whitespace...

//Sample Rate schreiben

for (i = 0; i < 10; i++)

str = 0;

Header.read(pBuffer, 4);

XMLFile.write("<SampleRate value=\"",20);

outxml = Buffer[0]; //* 0x1000000 + Buffer[1] * 0x10000 + Buffer[2] * 0x100 + Buffer[3];

_itoa(outxml, str, 4);

XMLFile.write(str,4);

XMLFile.write("\"/>\n", 3);

Eine Idee??

Link zu diesem Kommentar
Auf anderen Seiten teilen

oh,

die letzte Zeile sollte eigentlich so aussehen.

outxml = Buffer[0]; * 0x1000000 + Buffer[1] * 0x10000 + Buffer[2] * 0x100 + Buffer[3];

_itoa(outxml, str, 10);

XMLFile.write(str,10);

das war eben nur ein Test gewesen. Was das mit Webdesign zu tun hat weiß ich auch nicht, aber das hier ist das einzige Unterforum was sich mit XML beschäftigt...glaube ich...wenn nicht entschuldige ich mich für den falschen Post. Aber funktionieren tuts trotzdem nicht...

Link zu diesem Kommentar
Auf anderen Seiten teilen

XMLFile.write(str,10);
Ich sagte doch, du musst die tatsächliche Länge des Strings berücksichtigen. Du schreibst 10 Zeichen in die Datei, egal wie lang str ist. Ist str kürzer, wird die Stringterminierung in die Datei geschrieben, was vermutlich kein gültiges XML ergibt. Ist str länger, schneidest du die letzten Stellen der Zahl ab.

Ich verstehe sowieso nicht, wieso du in eine Textdatei binär schreibst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

und das funktioniert auch mit schreiben in eine andere Datei?
Wieso nicht? ostream ist ostream, das ist ja der Sinn der C++-Streams.


//kein _itoa, kein write
XMLFile << outxml<< "\"/>\n";[/code]

aber leider hat sich nix dran geändert. es funktionert zwar aber bei der sample rate kommt der fehler wieder
Das sind auch nur 19 Zeichen. Du schreibst 20. Wirf erst mal write komplett raus.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

habe mal ein verständnisfrage

Meine quelldatei weißt folgende Hexzahlen auf 00 0d d4 24

und wenn ich diese zahlen mit diesem code auslese

outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 + Buffer[0];

outxml +=8;

erhalte ich anstatt dd424 , cd424...wieso? es steht im debugger

Buffer[0] 0x24

Buffer[1] 0xd4

Buffer[2] 0x0d

Buffer[3] 0x00

??? verstehe ich nicht....

Link zu diesem Kommentar
Auf anderen Seiten teilen

also die Zahlen stimmen im debugger so lange bis er die zeile

outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 + Buffer[0];

abgearbeitet hat. Sie stehen dann richtig in den Buffers drin aber im outxml steht dann das falsche...

die +=8 gehören zur Deklaration des Headers laut Standard. das gleiche problem habe ich dann auch paar zeilen tiefer bei...

XMLFile<<("<SampleRate value=\"");

outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 + Buffer[0];

XMLFile << outxml<< "_Hz\"/>\n";

Dort sollte raus kommen 80 bb aber er macht draus ff ff 80 bb obwohl ich vorher outxml auf null setze. Laut Buffer stehen in Buffer[3] und Buffer[2] hex00 drin.

Link zu diesem Kommentar
Auf anderen Seiten teilen


char Buffer[4];

	char* pBuffer = Buffer;

	unsigned int outxml;

	ifstream Header("eingabe.wav", ios::in|ios::binary);

	ofstream XMLFile("header.xml");


	// Erste und zweite Zeile schreiben

	XMLFile<<"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";

	XMLFile<<"<RiffWaveHeader>\n";


	// RIFF schreiben

	Header.read(pBuffer, 4);

	XMLFile.write("<RIFF value=\"", 13);	

	XMLFile.write(pBuffer, 4);

	XMLFile.write( "\"/>\n",3);


	// Filesize schreiben

	outxml = 0;

	Header.read(pBuffer,4);

	XMLFile<<("<LengthOfFile value=\"");

  outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 +  Buffer[0]; 

  outxml +=8;

	XMLFile << outxml<< "_byte\"/>\n";


	// WAVE schreiben

	Header.read(pBuffer, 4);

	XMLFile.write("<WAVE value=\"", 13);

	XMLFile.write(pBuffer, 4);

	XMLFile.write("\"/>\n", 3);


	// Format Chunk schreiben

	Header.read(pBuffer, 4);

	XMLFile.write("<FormatChunk value=\"", 21);

	XMLFile.write(pBuffer, 4);

	XMLFile.write("\"/>\n", 3);


	// ChunkSize schreiben	


	Header.read(pBuffer, 4);

	XMLFile<<("<ChunkSize value=\"");

	outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 +  Buffer[0]; 

	XMLFile << outxml<< "_byte\"/>\n";


	// Format schreiben


	Header.read(pBuffer, 2);

	XMLFile<<("<Format value=\"");

	outxml = Buffer[1] * 0x100 +  Buffer[0]; 

	XMLFile << outxml<< " [1=PCM]\"/>\n";


	//Channels schreiben


	Header.read(pBuffer, 2);

	XMLFile<<("<Channels value=\"");

	outxml = Buffer[1] * 0x100 +  Buffer[0]; 

	XMLFile << outxml<< "_Ch\"/>\n";


	//Sample Rate schreiben

	outxml =0;

	Header.read(pBuffer, 4);

	XMLFile<<("<SampleRate value=\"");

	outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 +  Buffer[0]; 

	XMLFile << outxml<< "_Hz\"/>\n";


	//Bytes per second schreiben


	Header.read(pBuffer, 4);

	XMLFile<<("<BytesSecond value=\"");

	outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 +  Buffer[0]; 

	XMLFile << outxml<< "_bytes/second\"/>\n";


	//Block Align schreiben


	Header.read(pBuffer, 2);

	XMLFile<<("<BlockAlign value=\"");

	outxml = Buffer[1] * 0x100 +  Buffer[0]; 

	XMLFile << outxml<< "\"/>\n";


	//Bits per Sample schreiben


	Header.read(pBuffer, 2);

	XMLFile<<("<Bits-per-Sample value=\"");

	outxml = Buffer[1] * 0x100 +  Buffer[0]; 

	XMLFile << outxml<< "_bit\"/>\n";



	//Data Chunk schreiben

	Header.read(pBuffer, 4);

	XMLFile.write("<DATA value=\"", 13);	

	XMLFile.write(pBuffer, 4);

	XMLFile.write( "\"/>\n",3);


	//Laenge des Data Chunk


	Header.read(pBuffer, 4);

	XMLFile<<("<DataLength value=\"");

	outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 +  Buffer[0]; 

	XMLFile << outxml<< "_bytes\"/>\n";


	// XML-File abschließen

	XMLFile<<("</RiffWaveHeader>\n");

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...