Шустрый

Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.6.2006
Репутация: нет Всего: нет
|
Здраствуйте! Использую Eclipse компилирую GCC Как перевести в С++ Unix // т.к программа будет работать в Linux Графический интерфейс не нужен! Есть код на С++ Builder | Код | include <vcl.h> #include <stdio.h> #pragma hdrstop
#include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- bool ValidNumber(AnsiString & InputValue) { char I = 1; //Char imeet razmer 1 bait. InputValue = InputValue.Trim(); if ((InputValue == "") || (InputValue.Pos("000000000000000") > 0)) { return false; } while ((I <= InputValue.Length()) && ((InputValue[I] == '1') || (InputValue[I] == '2') || (InputValue[I] == '3') || (InputValue[I] == '4') || (InputValue[I] == '5') || (InputValue[I] == '6') || (InputValue[I] == '7') || (InputValue[I] == '8') || (InputValue[I] == '9') || (InputValue[I] == '0'))) { ++I; } if (I <= InputValue.Length()) { return false; } else { return true; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { FILE * dat; char ReadData [2500]; FILE * spr; //file of longint. int n; long I, J; long LengthData; AnsiString s; AnsiString LocalString; int LocalInteger; TDateTime LocalDate; long LengthTalk; bool DateError; char Trans [255]; char OutData [25]; int RealSize; long Value; AnsiString MainPath;
for (I = 0; I <= 255; ++I) { Value = 0; if ((I & 1) == 1) { Value = Value | 0x80; } if ((I & 0x2) == 2) { Value = Value | 0x40; } if ((I & 0x4) == 4) { Value = Value | 0x20; } if ((I & 0x8) == 8) { Value = Value | 0x10; } if ((I & 0x10) == 0x10) { Value = Value | 0x8; } if ((I & 0x20) == 0x20) { Value = Value | 0x4; } if ((I & 0x40) == 0x40) { Value = Value | 0x2; } if ((I & 0x80) == 0x80) { Value = Value | 0x1; } Trans[I] = Value; }
Table1->Close(); Table1->TableType = ttFoxPro; Table1->DatabaseName = MainPath; Table1->TableName = "temp.dbf"; Table1->FieldDefs->Clear(); Table1->FieldDefs->Clear();
Table1->FieldDefs->Add("OutComing", ftString, 7, false); / Table1->FieldDefs->Add("Incoming", ftString, 16, false); Table1->FieldDefs->Add("DateTalk", ftString, 8, false); Table1->FieldDefs->Add("TimeTalk", ftString, 8, false); Table1->FieldDefs->Add("LengthTalk", ftInteger, 0, false); Table1->FieldDefs->Add("Inf", ftString, 5, false); Table1->CreateTable();
n = 0;
dat = fopen("c:\\1.dat", "r");
spr = fopen("c:\\1.spr", "r");
Table1->Close(); Table1->DatabaseName = MainPath; Table1->TableName = "temp.dbf"; ûé! Table1->Open(); n = 0; while (!feof(spr)) { // ÷èòàåì äî êîíöà spr fread(&LengthData, sizeof(long), 1, spr); ++n; Form1->Caption = "îáðàáîòêà - " + IntToStr(n) + " RealSize = fread(ReadData, sizeof(long), LengthData, dat); //Õ.Ç if (RealSize > 2048) for (I = 1; I <= 84; ++I) { for (J = 1; J <= 24; ++J) //----------------------------------dat+spr ---------------------- OutData[J] = Trans[ReadData[(I-1)*24+J+31]]; Table1->Append(); Table1->Edit(); LocalString = IntToHex(OutData[1], 2)[1]; LocalString = LocalString + IntToHex(OutData[1], 2)[2]; // Öèôðà 2 7 LocalString = LocalString + IntToHex(OutData[2], 2)[1]; // Öèôðà 3 4 LocalString = LocalString + IntToHex(OutData[2], 2)[2]; // Öèôðà 4 5 LocalString = LocalString + IntToHex(OutData[3], 2)[1]; // Öèôðà 5 5 LocalString = LocalString + IntToHex(OutData[3], 2)[2]; // Öèôðà 6 5 LocalString = LocalString + IntToHex(OutData[4], 2)[1]; // Öèôðà 7 0 Table1->FieldByName("OutComing")->AsString = LocalString; if (!ValidNumber(LocalString)) { Table1->Cancel(); continue; } LocalString = IntToHex(OutData[4], 2)[2]; LocalString = LocalString + IntToHex(OutData[5], 2)[1]; LocalString = LocalString + IntToHex(OutData[5], 2)[2]; LocalString = LocalString + IntToHex(OutData[6], 2)[1]; LocalString = LocalString + IntToHex(OutData[6], 2)[2]; LocalString = LocalString + IntToHex(OutData[7], 2)[1]; LocalString = LocalString + IntToHex(OutData[7], 2)[2]; LocalString = LocalString + IntToHex(OutData[8], 2)[1]; LocalString = LocalString + IntToHex(OutData[8], 2)[2]; LocalString = LocalString + IntToHex(OutData[9], 2)[1]; LocalString = LocalString + IntToHex(OutData[9], 2)[2]; LocalString = LocalString + IntToHex(OutData[10], 2)[1]; LocalString = LocalString + IntToHex(OutData[10], 2)[2]; LocalString = LocalString + IntToHex(OutData[11], 2)[1]; LocalString = LocalString + IntToHex(OutData[11], 2)[2]; LocalString = LocalString + IntToHex(OutData[12], 2)[1]; LocalInteger = StrToInt(IntToHex(OutData[12], 2)[2] + IntToHex(OutData[13], 2)[1]); LocalString = LocalString.SubString(1, LocalInteger); if (!ValidNumber(LocalString)) { Table1->Cancel(); continue; } Table1->FieldByName("InComing")->AsString = LocalString; LocalString = IntToHex(OutData[15], 2)[2]; LocalString = LocalString + IntToHex(OutData[16], 2)[1] + "."; LocalString = LocalString + IntToHex(OutData[14], 2)[2]; LocalString = LocalString + IntToHex(OutData[15], 2)[1] + "."; LocalString = LocalString + IntToHex(OutData[13], 2)[2]; LocalString = LocalString + IntToHex(OutData[14], 2)[1] + " "; LocalString = LocalString + IntToHex(OutData[16], 2)[2]; LocalString = LocalString + IntToHex(OutData[17], 2)[1] + ":"; LocalString = LocalString + IntToHex(OutData[17], 2)[2]; LocalString = LocalString + IntToHex(OutData[18], 2)[1] + ":"; LocalString = LocalString + IntToHex(OutData[18], 2)[2]; LocalString = LocalString + IntToHex(OutData[19], 2)[1];
try { LocalDate = StrToDateTime(LocalString); } catch (...) { } LocalString = IntToHex(OutData[19], 2)[2]; LocalString = LocalString + IntToHex(OutData[20], 2)[1] + ":"; LocalString = LocalString + IntToHex(OutData[20],2)[2]; LocalString = LocalString + IntToHex(OutData[21],2)[1] + ":"; LocalString = LocalString + IntToHex(OutData[21],2)[2]; LocalString = LocalString + IntToHex(OutData[22],2)[1]; LengthTalk = StrToInt(IntToHex(OutData[19], 2)[2] + IntToHex(OutData[20], 2)[1]) * 60; LengthTalk = (LengthTalk + StrToInt(IntToHex(OutData[20], 2)[2] + IntToHex(OutData[21], 2)[1])) * 60; LengthTalk = LengthTalk + StrToInt(IntToHex(OutData[21], 2)[2] + IntToHex(OutData[22], 2)[1]); if (LengthTalk > 0) Table1->FieldByName("LengthTalk")->AsString = IntToStr(LengthTalk); else { Table1->Cancel(); continue; } LocalDate = LocalDate - StrToTime(LocalString); Table1->FieldByName("DateTalk")->AsString = DateToStr(LocalDate); Table1->FieldByName("TimeTalk")->AsString = TimeToStr(LocalDate); { LocalString = IntToHex(OutData[22], 2)[2]; LocalString = LocalString + IntToHex(OutData[23], 2)[1]; LocalString = LocalString + IntToHex(OutData[23], 2)[2]; LocalString = LocalString + IntToHex(OutData[24], 2)[1]; LocalString = LocalString + IntToHex(OutData[24], 2)[2]; Table1->FieldByName("Inf")->AsString = LocalString; } Table1->Post(); } } fclose(dat); fclose(spr); Table1->Close(); } //--
|
Начал на С Вот так | Код | #include <stdio.h>
int main() { // puts("Hello!"); FILE* spr = fopen("20080108.spr", "r"); FILE* dat = fopen("20080108.dat", "r"); long length_data; char read_data[2500]; while (!feof(spr)) { fread(&length_data, sizeof(long), 1, spr); printf("%d\n", OutData); real_size = fread(&read_data,length_data, 1, dat); // -----------------далее--------
//--------------конец----------------- } fclose(spr); fclose(dat); }
|
Прро dat и spr Информация выводится блоками по 2Кбайта. Один блок содержит 84 записи, вначале каждого блока записывается 64 нуля ( 32 байта). Одна запись имеет длину 24 байта и содержит поля: -номер - 7 знаков, -номер - 16 знаков, -количество цифр - 2 знака, -дата в виде год, месяц, день - 6 знаков, -время час, минута, секунда - 6 знаков, -длительность час, минута, секунда - 6 знаков, -количество - 5 знаков. 1 знак - полбайта. Запись осуществляется в десятичном коде Dat - информация Spr- длина и наличие блоков Это сообщение отредактировал(а) 344092 - 20.3.2008, 13:11
|