Прямое копирование hex-кода на c++ builder 6.0
От: bedoval  
Дата: 28.01.10 17:00
Оценка:
Столкнулся с dat-файлом, склеенным из полноценных wav-файлов.
При это в его (файла) начале описаны адреса начала/конца wav-ов, и их названия (типа *.wav).
Хотелось бы разрезать данный файл в автоматическом режиме, а не коцать по одному сегменту >800 раз.
Требуется ткнуть меня носом в имеющуюся инфу по поводу решения данной проблемы или подсказать на общедоступном куда идтить...
Re: Прямое копирование hex-кода на c++ builder 6.0
От: alexdev Россия http://alexdev-ru.livejournal.com
Дата: 28.01.10 17:20
Оценка:
Здравствуйте, bedoval, Вы писали:

B>Столкнулся с dat-файлом, склеенным из полноценных wav-файлов.

B>При это в его (файла) начале описаны адреса начала/конца wav-ов, и их названия (типа *.wav).
B>Хотелось бы разрезать данный файл в автоматическом режиме, а не коцать по одному сегменту >800 раз.
B>Требуется ткнуть меня носом в имеющуюся инфу по поводу решения данной проблемы или подсказать на общедоступном куда идтить...

Если я вас правильно понял, то вам нужно открыть файл с ключом 'b' (т.е binary) и собственно читать данные.
... << RSDN@Home 1.2.0 alpha 4 rev. 1410>>
Re[2]: Прямое копирование hex-кода на c++ builder 6.0
От: bedoval  
Дата: 29.01.10 01:46
Оценка:
Здравствуйте, alexdev, Вы писали:

A>Если я вас правильно понял, то вам нужно открыть файл с ключом 'b' (т.е binary) и собственно читать данные.


Спасибо, сейчас попробую.
Re[3]: Прямое копирование hex-кода на c++ builder 6.0
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 29.01.10 08:35
Оценка:
Здравствуйте, bedoval, Вы писали:

A>>Если я вас правильно понял, то вам нужно открыть файл с ключом 'b' (т.е binary) и собственно читать данные.


B>Спасибо, сейчас попробую.


А еще проще взять TFileStream, прочитать "оглавление" (имя файла + смещение + длина) и просто читать из файла и писать в другой поток (тоже TFileStream, но создаваемый на каждый элемент оглавления).
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re[4]: Прямое копирование hex-кода на c++ builder 6.0
От: bedoval  
Дата: 29.01.10 15:33
Оценка:
Здравствуйте, DarkMaster, Вы писали:

DM>А еще проще взять TFileStream, прочитать "оглавление" (имя файла + смещение + длина) и просто читать из файла и писать в другой поток (тоже TFileStream, но создаваемый на каждый элемент оглавления).


Да, действительно — так проще, спасибо.
Re: Прямое копирование hex-кода на c++ builder 6.0
От: bedoval  
Дата: 31.01.10 15:44
Оценка:
Вот первые результаты:
По средствам hex-редактора dat-файл разрезан на две части.
По следующему коду разбит на >2000 кусков индивидуального назначения:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString inFile;
AnsiString outPath;
AnsiString sk;
AnsiString outFileName1;
AnsiString outFileName2;
AnsiString outFileName3;
WideString uniCode;
TFileStream *inStream;
TFileStream *outStream;
int posStream;
int outCount;
int inSize;
int outSize;
int currentFile;
int longExt;

inFile = Form1->Edit1->Text; //get path for cutting file
inStream = new TFileStream(inFile, fmOpenRead); //make stream from cutting file
inSize = inStream->Size; //get size of cutting stream
outSize = StrToInt (Form1->Edit2->Text); //get size of result parts
posStream = 0; //set start postion for stream reading
currentFile = 1; //set start value for result file counter
outCount = inSize/outSize; //count number of result files
Form1->Edit4->Text = outCount; //show number of result files
longExt = 3; //set number of elemnt in result files extention
outPath = Form1->Edit3->Text; //get path for saving result files
outFileName1 = Form1->Edit5->Text; //get pre-name for saving result files with "start position"
outFileName2 = Form1->Edit6->Text; //get pre-name for saving result files with "final position"
outFileName3 = Form1->Edit7->Text; //get pre-name for saving result files with "sound name"
while(inSize — posStream >= outSize) //until start position of stream reading far from end of stream mor then result part continue cutting
{
sk = outFileName1 + Format(".%." + IntToStr(longExt)+ "d", OPENARRAY(TVarRec,(currentFile))); //create current name for result file of "start position"
outStream = new TFileStream(sk, fmCreate); //make stream from result file
inStream->Position = posStream; //set position for reading "start position"
outStream->CopyFrom(inStream, 4); //copy-ala-cuttig process for "start position"
delete outStream; //kill result stream
sk = outFileName2 + Format(".%." + IntToStr(longExt)+ "d", OPENARRAY(TVarRec,(currentFile))); //create current name for result file of "final position"
outStream = new TFileStream(sk, fmCreate); //make stream from result file
inStream->Position = (posStream+4); //set position for reading "final position"
outStream->CopyFrom(inStream, 4); //copy-ala-cuttig process for "final position"
delete outStream; //kill result stream
sk = outFileName3 + Format(".%." + IntToStr(longExt)+ "d", OPENARRAY(TVarRec,(currentFile))); //create current name for result file of "sound name"
outStream = new TFileStream(sk, fmCreate); //make stream from result file
inStream->Position = (posStream+16); //set position for reading "sound name"
outStream->CopyFrom(inStream, outSize-16); //copy-ala-cuttig process for "sound name"
delete outStream; //kill result stream
posStream = posStream + outSize; //correct start postion for stream reading
currentFile = currentFile + 1; // correct value for result file counter
}
delete inStream; //kill stream with cutting file
}
Re[2]: Прямое копирование hex-кода на c++ builder 6.0
От: bedoval  
Дата: 31.01.10 17:15
Оценка:
Подскажите:
-как вытащить адрес из файла,
-как преобразовать hex-адрес в десятичное смещение,
-как напрямую читать поток в unicode-строку.

Заранее — спасибо.
Re[3]: Прямое копирование hex-кода на c++ builder 6.0
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 01.02.10 14:59
Оценка:
Здравствуйте, bedoval, Вы писали:

B>Подскажите:

B>-как вытащить адрес из файла,

Предполагаю, что так (о структуре оглавления ты ничего не говоришь):

var MyAddressValue:integer;

FileStream.Read(MyAddressValue,SizeOf(MyAddressValue));


B>-как преобразовать hex-адрес в десятичное смещение,


Зачем? У тебя адреса смещений записаны в символьном виде в виде hex значений? Или ты это в Фаре увидел?

B>-как напрямую читать поток в unicode-строку.


Unicode строка суть набор байт. Поэтому никаких отличий между чтением набора байт (буфер, строка, массив) и чтением Unicode строки нет. Или у тебя где-то еще длина хранится?

P.S. В примерах кода используй теги для форматирования исходного текста — читать невозможно.
WBR, Dmitry Beloshistov AKA [-=BDS=-]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.