Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Перевод с С++ Builder


Автор: 344092 19.3.2008, 12:14
Здраствуйте!

Использую 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- длина и наличие блоков

Автор: SABROG 19.3.2008, 12:47
Цитата(344092 @  19.3.2008,  12:14 Найти цитируемый пост)
Начал на С++ Вот так


А почему остановился ?

Автор: bsa 19.3.2008, 13:01
тот код, что ты написал якобы на С++ к С++ не имеет никакого отношения. Это Си.

Автор: MAKCim 19.3.2008, 17:50
Цитата(bsa @  19.3.2008,  13:01 Найти цитируемый пост)
тот код, что ты написал якобы на С++ к С++ не имеет никакого отношения

и к юниксу тоже

Автор: SABROG 19.3.2008, 17:58
Цитата(MAKCim @ 19.3.2008,  17:50)
Цитата(bsa @  19.3.2008,  13:01 Найти цитируемый пост)
тот код, что ты написал якобы на С++ к С++ не имеет никакого отношения

и к юниксу тоже

А с чем это связано ? С отсутствием пустой строки в конце исходника ?

А если C++, то обязательно ifstream ?

Во че http://ru.wikibooks.org/wiki/%D0%A1%D0%B8%2B%2B  smile 

Автор: bsa 20.3.2008, 12:27
Цитата(SABROG @ 19.3.2008,  17:58)
А если C++, то обязательно ifstream ?

если явных требований использовать stdio.h нет, то крайне желательно, как и все стандартные С++ вещи (vector, string и пр.) - меньше ошибок будет.

Добавлено через 1 минуту и 34 секунды
А потом, в С++ нужно использовать cstdio вместо stdio.h

Автор: 344092 18.7.2008, 16:27
как быть с IntToHex в Си нет такого????

Автор: SABROG 18.7.2008, 16:56
Цитата(344092 @ 18.7.2008,  16:27)
как быть с IntToHex в Си нет такого????

printf ?

Автор: 344092 23.7.2008, 11:44
Да Printf похоже подходит , а как объявлять AnsiString;????

Автор: Mayk 23.7.2008, 11:46
Цитата(344092 @  23.7.2008,  15:44 Найти цитируемый пост)
Да Printf похоже подходит , а как объявлять AnsiString;???? 

std::string

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)