Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Kopiowanie zmiennych typu string

Ostatnio zmodyfikowano 2017-06-23 16:00
Autor Wiadomość
1aam2am1
» 2017-06-19 21:23:29
Tego się tak nie robi. Nie w każdym wierszu masz takie same dane lub ilość.
W każdym wierszu o ile znam się na gcode jest
G0 lub G1 tryb ruchu, lub inna komenda
X... Y... - ruch w poziomie
Z... - ruch w pionie bo obydwa nie mogą dziać się na raz (w pionie i poziomie)
E i F -prędkość i pozycja

Według mnie nie powinieneś obrabiać stringów tak jak próbujesz tylko:

1. Zadeklaruj trzy zmienne x,y,z
2. Wczytuj każdą linię z pliku pojedynczo
3. Jeżeli znaleziono X to wpisz wartość do X, Znaleziono Y to do Y, itd...
4. Jeżeli koniec linii to wypisz wartości x, y, z do pliku z przerobionymi danymi.
P-162703
wisnia633
Temat założony przez niniejszego użytkownika
» 2017-06-23 16:00:39
Witam,
Co do gkodu, to zależy od efektu końcowego ja potrzebuje tak naprawdę zbiór punktów (x,y,z). Pozostałe oznaczenia muszę i tak usunąć.

Wracając do tematu napisałem funkcję która ma teoretycznie na postawie znalezienia x,y,e kopiować wartość zmienneZmiennejZ w miejsce znalezienia E-1. Szukanie zmiennych działa poprawnie, przekazanie działa ok. Nie działa tylko "insert" i teraz nie wiem dlaczego. Podejrzewam że znowu źle mogę interpretować założenia programu.

C/C++
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

string szukanieZ( string & wiersz_konwert )
{
    char szukanyZnakZ = 'Z';
    string wartoscZmiennejZ;
   
    size_t foundZ = wiersz_konwert.find( szukanyZnakZ );
    if( foundZ != string::npos )
    {
        wartoscZmiennejZ = wiersz_konwert.substr( foundZ + 1, 6 );
        cout << wartoscZmiennejZ << endl;
    }
   
    return wartoscZmiennejZ;
}

string kopiowanieZ( string & przeszukiwane, string & dopisywanieZ )
{
    char szukanyZnakE = 'E';
    char szukanyZnakX = 'X';
    char szukanyZnakY = 'Y';
   
    size_t foundX = przeszukiwane.find( szukanyZnakX );
   
    size_t foundY = przeszukiwane.find( szukanyZnakY );
   
    size_t foundE = przeszukiwane.find( szukanyZnakE );
    if( foundE != string::npos && foundX != string::npos && foundY != string::npos )
   
         przeszukiwane.insert( foundE - 1, dopisywanieZ );
   
    return przeszukiwane;
}


int main()
{
    string nazwa_pliku; //deklarazja nazwy pliku wprowadzanej z klawiatury
   
    cout << "Podaj nazwe pliku: " << endl; //pytanie o nazwê pliku
    cin >> nazwa_pliku; //odczyt nazwy z klawiatury
   
    ifstream plik( nazwa_pliku.c_str(), ios::in ); //rozpoczêcie odczytu z pliku o podanej przez u¿utkowanika nazwie
    ofstream nowy( "punkty.txt", ios::out | ios::app ); //stworzenei nowego pliku w którym zostana zapisane odczytywane dane
    if( plik.good() == true ) //sprawdzenie istnienia pliku
    {
        int nr_wiersza_odczyt = 0;
        //zmienna pomocnicza okreslajaca liczbe wierszy odczytanych
        while( !plik.eof() ) //petla dziala do wyczerpania wszystkich wierszy w pliku
        {
            string wiersz_odczyt;
            string wartoscZmiennejZ;
           
            getline( plik, wiersz_odczyt ); //odczytanie z pliku zmiennej
           
            szukanieZ( wiersz_odczyt );
           
            kopiowanieZ( wiersz_odczyt, wartoscZmiennejZ );
           
            nowy << kopiowanieZ( wiersz_odczyt, wartoscZmiennejZ ) << endl; //zapis do pliku nowy
           
            nr_wiersza_odczyt++; //przejscie do nastepnego wiersza
           
        }
       
        cout << nr_wiersza_odczyt << endl;
       
    }
    else cout << "ERROR\n\n";
   
    plik.close();
    nowy.close();
}
P-162782
1 2 « 3 »
Poprzednia strona Strona 3 z 3