NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Milan
Člen
Avatar
Milan:20.2.2018 6:51

Ahoj,

PROSÍM o pomoc. Mám v C++ napsaný kod, díky kterému jsem schopen pracovat a eliminovat určitou část textáku a následně vypsat data do nového souboru. Jedná se o texťák se souřadnicemi a barevnou škálou: x, y, z, odrazivost, r, g, b.
Zápis v C++

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <time.h>
#include <ctime>

const int COLUMNS = 7;

struct radek
{
        float x;
        float y;
        float z;
        float odrazivost;
        float r;
        float g;
        float b;
};


using namespace std;

radek MakeRow(float pole[7])
{
        radek soucasnejRadek;
        soucasnejRadek.x = pole[0];
        soucasnejRadek.y = pole[1];
        soucasnejRadek.z = pole[2];
        soucasnejRadek.odrazivost = pole[3];
        soucasnejRadek.r = pole[4];
        soucasnejRadek.g = pole[5];
        soucasnejRadek.b = pole[6];

        return soucasnejRadek;
}

float main()
{
                float mez_X[2];
                float mez_Y[2];
                float mez_Z[2];

                int odrazivost[2];

                int barva_r[2];
                int barva_g[2];
                int barva_b[2];
                int pocetRadku;
                std::string filename;
                std::string filenameOUT = "Vysledek_Cisla_Dle_Souradnic";
                std::ifstream ifs(filename.c_str(), std::ifstream::in);
                std::ofstream ofs(filenameOUT.c_str(), std::ofstream::out);
                int a = 0;

                if (ifs.is_open() && ofs.is_open())
                {
                        std::string line;
                        while (std::getline(ifs, line))
                        {
                                std::istringstream ss(line);
                                radek soucasnejRadek;

                                if (!(ss >> soucasnejRadek.x >> soucasnejRadek.y >> soucasnejRadek.z >> soucasnejRadek.odrazivost >> soucasnejRadek.r >> soucasnejRadek.g >> soucasnejRadek.b))
                                {
                                        continue;
                                }

                                if (mez_X[0] <= soucasnejRadek.x && mez_X[1] >= soucasnejRadek.x)
                                {
                                        if (mez_Y[0] <= soucasnejRadek.y && mez_Y[1] >= soucasnejRadek.y)
                                        {
                                                if (mez_Z[0] <= soucasnejRadek.z && mez_Z[1] >= soucasnejRadek.z)
                                                {
                                                        a++;
                                                        pocetRadku = a;
                                                        ofs << soucasnejRadek.x << " " << soucasnejRadek.y << " " << soucasnejRadek.z << " " << soucasnejRadek.odrazivost << " " << soucasnejRadek.r << " " << soucasnejRadek.g << " " << soucasnejRadek.b << '\n';
                                                }

                                        }

                                }


                        }
                        ifs.close();
                        ofs.close();
                }
                else
                {
                        std::cout << "Error opening file";
                }

V podstatě jde o to, že mám vytvořenou strukturu s proměnýma a pak načítám jednotlivý řádek (může jich být v tom texťáku teřba i 40mil.) a dle podmínky vypisuju jednotlivé řádky do nového souboru. Tím prostě eliminuju to co nechci... Ale nejsem schopen tohle přepsat do C#. konkrétně nevím, jak vytvořit tu strukturu s polem (Radek (MakeRow(...)). A pak nevím jak na ten stringstream ss(line), kde přes operátor >> načítám data ze streamu a testuji stav streamu.

Neporadil by mi PROSÍM někdo, jak to přepsat do C#? Díky za každou radu.

 
Odpovědět
20.2.2018 6:51
Avatar
Milan
Člen
Avatar
Milan:20.2.2018 10:33

V podstatě jsem jen trapně napsal čtenía zápis do nového souboru.

namespace Pruhyb_VypisKonzole
{

    class Program
    {
        public static Stream ToStream(string s)
        {
            var stream = new MemoryStream();
            var writer = new StreamWriter(stream);
            writer.Write(s);
            writer.Flush();
            stream.Position = 0;
            return stream;
        }

        static void Main(string[] args)
        {

            const int COLUMNS = 6;

            float x;
            float y;
            float z;
            float r;
            float g;
            float b;

            /*float[] pole = new float[6];
            pole[0] = x;
            pole[1] = y;
            pole[2] = z;
            pole[3] = r;
            pole[4] = g;
            pole[5] = b;*/

            using (StreamReader sr = new StreamReader(@"soubor.txt"))
            {
                string line;
                while ((line=sr.ReadLine()) != null)
                {
                    {
                        using (StreamWriter sw = new StreamWriter(@"soubor1.txt", true))
                        {
                            sw.WriteLine(line);
                            sw.Flush();
                        }
                    }
                }

            }
            Console.ReadKey();
        }
    }
}

Takhle vypadá část texťáku:

0.56 -7.122 -0.734 146
0.767 -7.093 -0.735 148
0.87 -6.946 -0.735 143
0.434 -7.149 -0.734 164

Ale jak přiřadit z daného řádku v texťáku, aby první číslo byla souřadnice x atd... Kde pak můžu podle podmínek sobour porcovat, jak jsem uvedl výše v C++ zápisu?

 
Nahoru Odpovědět
20.2.2018 10:33
Avatar
Odpovídá na Milan
Michal Štěpánek:20.2.2018 11:08

Když to máš v C++, proč jsi to dal do vlákna na C#?

Nahoru Odpovědět
20.2.2018 11:08
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Milan
Člen
Avatar
Milan:20.2.2018 11:09

Protože bych to chtěl přepsat do C#.

 
Nahoru Odpovědět
20.2.2018 11:09
Avatar
Odpovídá na Milan
Radek Chalupa:20.2.2018 11:14

A potřebuješ to přepisovat? V .net si můžeš vytvořil classlibrary v C++ a tu použít v projekt napsaném v .net, resp. c#.

 
Nahoru Odpovědět
20.2.2018 11:14
Avatar
Milan
Člen
Avatar
Milan:20.2.2018 11:20

To jsem nikdy nepoužil. :-) Můžu zkusit. Nicméně i z hlediska cvičného bych to rád přepsal, budu to posléze používat ve WinForms, tak bych rád, kdybych to měl přepsané. Už jsem si vytvořil tu strukturu soucasnejRadek. Teď akorát nevím jak ten string line převést na stringstream a rozdělit ten texťák podle té struktury. Abych to dále mohl dělit podle mezí.

 
Nahoru Odpovědět
20.2.2018 11:20
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.