c# do C++ wielka prosba

0

Mam wielką prośbę mógłby mi ktoś przepisać program napisany w C# do C++. Króciutki programik, byłbym bardzo wdzięczny. Coś mi to nie idzie.
Ponizej podaje kod programu:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

    private void button1_Click(object sender, EventArgs e)
    {
        int znak=0;
        string ddd;
        string asdf="";
        int licznik = 0;
        int licznik2 = 0;
        FileStream plik1 = new FileStream("c:\\zad3_1.txt", FileMode.Open);

            string[] tabDepartament1 = new string[plik1.Length / 72];    
            decimal[] tabKwota1 = new decimal[plik1.Length/72];
            string[] tabOpis1 = new string[plik1.Length / 72];

            for (int i=0; i < plik1.Length; i++)
            {
                znak = plik1.ReadByte();
                ddd = asdf + Convert.ToString((char)znak);
                asdf = ddd;
                licznik++;
                if (licznik == 73)
                {
                    tabDepartament1[licznik2] = asdf.Substring(0, 5);
                    tabKwota1[licznik2] = Convert.ToDecimal(asdf.Substring(5, 16))/100;
                    tabOpis1[licznik2] = (asdf.Substring(21, 50)).Trim();
                    licznik = 0;
                    ddd = "";
                    asdf = "";
                    licznik2++;
                }

            }
            //textBox1.Text = Convert.ToString(plik1.Length);
            plik1.Close();
            //textBox2.Text = Convert.ToString( tabOpis1[0]);


        *--------------------------------------------------------------------------*
            int znak2 = 0;
            string ddd2;
            string asdf2 = "";
            int licznik12 = 0;
            int licznik22 = 0;
            FileStream plik2 = new FileStream("c:\\zad3_2.txt", FileMode.Open);

            string[] tabDepartament2 = new string[plik2.Length / 31];
            decimal[] tabKwota2 = new decimal[plik2.Length / 31];
            string[] tabOpis2 = new string[plik2.Length / 31];

            for (int i = 0; i < plik2.Length; i++)
            {
                znak2 = plik2.ReadByte();
                ddd2 = asdf2 + Convert.ToString((char)znak2);
                asdf2 = ddd2;
                licznik12++;
                if (licznik12 == 33)
                {
                    tabDepartament2[licznik22] = asdf2.Substring(0, 5);
                    tabKwota2[licznik22] = Convert.ToDecimal(asdf2.Substring(5, 16));
                    tabOpis2[licznik22] = (asdf2.Substring(21, 10)).Trim();
                    licznik12 = 0;
                    ddd2 = "";
                    asdf2 = "";
                    licznik22++;
                }

            }
            textBox1.Text = Convert.ToString(plik2.Length);
            plik2.Close();
            textBox2.Text = Convert.ToString(tabKwota1[1]);







        *------------------------------------------------------------*
            
            string strKwota;
            string record ;
            bool sprawdz = false;
            FileStream tworzeniePliku = new FileStream("C:\\zad3_wynik.txt", FileMode.Create);

            StreamWriter jkl = new StreamWriter(tworzeniePliku);
            for (int i = 0; i < tabDepartament2.Length;i++ )
            {
                for (int a = 0; a < tabDepartament1.Length; a++)
                {
                    if (tabDepartament2[i] == tabDepartament1[a])
                    {
                        if (tabOpis1[a] == "dodawanie")
                        {
                            strKwota = "0000000000000000" + Convert.ToString(tabKwota2[i] + tabKwota1[a]);
                            strKwota = strKwota.Substring(strKwota.Length - 16, 16);
                            DateTime curDate = DateTime.Now;
                            string data = curDate.ToString("d");
                            record= tabDepartament2[i]+ strKwota+ data +"\r\n" ;
                            jkl.Write(record);
                            sprawdz = true;
                        }
                        if (tabOpis1[a] == "odejmowanie")
                        {
                            strKwota = "0000000000000000" + Convert.ToString(tabKwota2[i] - tabKwota1[a]);
                            strKwota = strKwota.Substring(strKwota.Length - 16, 16);
                            DateTime curDate = DateTime.Now;
                            string data = curDate.ToString("d");
                            record = tabDepartament2[i] + strKwota + data + "\r\n";
                            jkl.Write(record);
                            sprawdz = true;
                        }
                    }
                    

                }
                
                        if (sprawdz == false)
                        {

                            strKwota = "0000000000000000" + Convert.ToString(tabKwota2[i]);
                            strKwota = strKwota.Substring(strKwota.Length - 16, 16);
                            DateTime curDate = DateTime.Now;
                            string data = curDate.ToString("d");
                            record = tabDepartament2[i] + strKwota + data + "\r\n";
                            jkl.Write(record);
                            sprawdz = true;
                        }
                    
                sprawdz = false;
            }
            jkl.Close();



    }
}

}

0

o.. widze C# plus standardowy formik.. a w C++ co Ci sie marzy? winapi? MFC? ATL? WTL? czy konsola?

0

Dzieki za zainteresowanie mam problemy. Mam problemy w C++ ze stringami i tablicami nie bardzo wiem jak do tego podejsc. Najlepiej w konsoli. Musze napisac program w C++ na jutro ale z c# lepiej mi znacznie idzie jak sie do przeróbki tego dobrałem to ni9c mi nie wychodzi. Prosiłbym i jakąś pomoc
Głownie chodzi mi o to zeby mi ten plik tworzyło nic nie musui wyswietlac.

0

Strasznie powtarzasz ten sam kod. Spróbuj taki powtarzający się fragmenty zastąpić jedną funkcją. Jako tablic użyj klasy vector, jako stringów użyj klasy string. I raczej nie używaj operatora new, bo tu nie ma Grabage Collectora (no chyba że managed c++).

0
#include <iostream>
#include <fstream>
#include <string>
#include <stringstream>
#include <time.h>

string& trim(string& str)
{
  string::size_type pos = str.find_last_not_of(' ');
  if(pos != string::npos)
  { str.erase(pos + 1);
    pos = str.find_first_not_of(' ');
    if(pos != string::npos) str.erase(0, pos);
  }
  else str.erase(str.begin(), str.end());
  return str;
}

int main()
{
  using namespace std;

  char bufor[72];
  
  //--------------------------------------------------------------------------//
  ifstream plik1("c:\\zad3_1.txt");
  
  vector<string> tabDepartament1;    
  vector<long double> tabKwota1;    //*double nei nadaje sie do liczenia PRAWDZIWYCH pieniedzy.
  vector<string> tabOpis1;

  do
  { plik1.read(bufor,72);
    if(plik1.fail())break;
    tabDepartament1.push_back(string(bufor+0,bufor+5));
    istringstream conv(string(bufor+5,bufor+21));long double tmp;conv>>tmp;tmp/=100;tabKwota1.push_back(tmp);
    tabOpis1.push_back(trim(string(bufor+21,bufor+72)));
  }while(1);
    
  plik1.close();  
  
  //--------------------------------------------------------------------------//
  ifstream plik2("c:\\zad3_2.txt");
  
  vector<string> tabDepartament2;    
  vector<long double> tabKwota2;    //*double nei nadaje sie do liczenia PRAWDZIWYCH pieniedzy.
  vector<string> tabOpis2;

  do
  { plik2.read(bufor,32);
    if(plik2.fail())break;
    tabDepartament2.push_back(string(bufor+0,bufor+5));
    istringstream conv(string(bufor+5,bufor+21));long double tmp;conv>>tmp;tmp/=100;tabKwota2.push_back(tmp);
    tabOpis2.push_back(trim(string(bufor+21,bufor+32)));
  }while(1);
    
  plik2.close();  
  
  //------------------------------------------------------------//
  string strKwota;
  bool sprawdz = false;

  ofstream tworzeniePliku("C:\\zad3_wynik.txt");

  for(int i=0;i<tabDepartament2.size(); ++i)
  { for(int a=0;a<tabDepartament1.size(); ++a)
      if(tabDepartament2[i] == tabDepartament1[a])
      { if(tabOpis1[a] == "dodawanie")
        { ostringstream conv;conv << "0000000000000000" << (tabKwota2[i] + tabKwota1[a]);strKwota = conv.str();
          strKwota.erase(0, strKwota.size()-16);

          time_t ltime;struct tm time;_localtime64_s( &time, &ltime );
          int len = strftime(bufor, 72, "%d/%m/%Y", time);
          string data(bufor+0,bufor+len);

          tworzeniePliku << tabDepartament2[i] << strKwota << data << endl;
          sprawdz = true;
        }
        if (tabOpis1[a] == "odejmowanie")
        { ostringstream conv;conv << "0000000000000000" << (tabKwota2[i] - tabKwota1[a]);strKwota = conv.str();
          strKwota.erase(0, strKwota.size()-16);

          time_t ltime;struct tm time;_localtime64_s( &time, &ltime );
          int len = strftime(bufor, 72, "%d/%m/%Y", time);
          string data(bufor+0,bufor+len);

          tworzeniePliku << tabDepartament2[i] << strKwota << data << endl;
          sprawdz = true;
        }
      }

    if (!sprawdz)
    { ostringstream conv;conv << "0000000000000000" << tabKwota2[i];strKwota = conv.str();
      strKwota.erase(0, strKwota.size()-16);

      time_t ltime;struct tm time;_localtime64_s( &time, &ltime );
      int len = strftime(bufor, 72, "%d/%m/%Y", time);
      string data(bufor+0,bufor+len);

      tworzeniePliku << tabDepartament2[i] << strKwota << data << endl;
      sprawdz = true;
    }
        
    sprawdz = false;
  }
  tworzeniePliku.close();
  
  return 0;
}  

disclaimer: kod tlumaczony linia-w-linie na biezaco, nie kompilowany, nie sprawdzany, moga byc wszelkiego rodzaju bledy. to ma ci tylko pokazac ze sie da i mniej wiecej jak by to moglo wygladac

0

Dzięki ludzie ludzie pomogliście. szkoda ze sie tu nie da wystawić pozytywnych komentarzy.

0

Wystarczy zwykle dziekuje ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1