Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Pomoc w napisaniu programu do "tłumaczenia"


Rekomendowane odpowiedzi

Opublikowano

Witam wszystkich. Zacznę od razu, że moja znajomość VB jest bardzo mała, ale jak się okazało na 5 roku studiów na wydziale mechanicznym jest mi potrzebna. Sprawa wygląda tak, muszę napisać program który będzie wczytywał plik (to mam) i np po naciśnięciu przycisku "tłumaczył".

Przykładowa linijka z pliku źródłowego GOTO / 40.00000, 0.00000, 2.00000, a chce uzyskac cos takiego G1 X40.00000 Y0.00000 Z2.00000.

Czy ktoś byłby mi w stanie pomóc w jakiś sposób?

Opublikowano

Jeden przykład to za mało, żeby przedstawić zasadę tych "tłumaczeń". Ogólnie to poczytaj o metodach dla stringów i wyrażeniach regularnych.

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

No spoko rozumiem. Dzięki za nakierowanie. No a własnie taki programik do robienia tego co napisałem (dla takiej jednej linijki) to od czego zaczac?

Opublikowano

Nie znam vb, ale:

  1. Rozbij string w miejscu "/" za pomocą jakiejś metody w stylu .split('/')
  2. Powinieneś dostać tablicę dwuelementową - drugi element zawierający teraz '40.00000, 0.00000, 2.00000' rozbijasz ponownie, tylko teraz w miejscach przecinków,
  3. Usuwasz białe znaki z każdego elementu tablic za pomocą jakiejś metody w stylu .trim()
  4. Modyfikujesz każdy element wg klucza w zależności co wejściowo zawiera,
  5. Łączysz zmodyfikowane elementy z powrotem w jeden string (za pomocą operatora konkatenacji, zwykle to po prostu znak +).

To tyle na szybko, na pewno da się to zrobić sprytniej, ale to też zadziała.

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

Witam. Po części zaczynam rozwiązywać problem. Póki co wczytuje sobie tekst do DataGridView, jednak mam taki problem. W pliku tekstowym niektóre linie są zakończone znakiem $ co świadczy że linia poniżej jest kontynuacją. Czyli przykładowo potrzebuję aby np taki tekst 

TOOLNO/1,TURN,1,0,3, 0.800000,$
0.000000, 0.000000, 0.300000,MMPR, 270.000000,SFM,$
CCLW,ON, 0.000000,NOTE

został wczytany do jednego wiersza a nie do trzech. Mógłby mi ktoś pomóc w tej kwestii bo moje próby są póki co nieskuteczne

Opublikowano

Sprawdź najpierw, czy wczytana linijka zawiera na końcu znak $, jeśli zawiera, to ją jedynie zapamiętujesz w pamięci bez ostatniego znaku i znowu wywołujesz funkcję wczytywania danych, ale dla kolejnej linijki, znowu sprawdzasz ostatni znak, i jeżeli zawiera znak $, to dopisujesz to do zapamiętanej linijki w pamięci i znowu zapisujesz w pamięci (zmiennej pomocniczej), i tak w kółko. Jeśli linijka nie będzie zawierać na samym koncu znaku $, to do zapamiętanych danych w pamięci dopisujesz tą linijkę, wrzucasz do datagridview i zerujesz zmienną pomocniczą.

Opublikowano

Ok, dzięki. Zasadę jak to powinno działać to mniej wiecej też wiedziałem choć nie ukrywam pomogłeś. Jednakże największy problem mam właśnie w zrealizowaniu tego w VB. Póki co kod programu wygląda tak:

     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles Button1.Click
        OpenFileDialog1.ShowDialog()
        TextBox1.Text = OpenFileDialog1.FileName
    End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles Button2.Click
        Try
            Dim line As String
            Dim reader As IO.StreamReader = Nothing
            Dim separators() As Char = {",", "/", ":"}
            Dim NrOfCols As Integer = 0
            Try
                'tworzenie kolumn
                 NrOfCols = 8
              
                For x = 0 To NrOfCols
                    Dim col As New DataGridViewTextBoxColumn
                    DataGridView1.Columns.Add(col)
                Next

                'czytanie pliku
                reader = New IO.StreamReader(OpenFileDialog1.FileName)
                line = reader.ReadLine

                While Not line Is Nothing
                    Dim parts As String() = line.Split(separators)
                        DataGridView1.Rows.Add(parts)
                        line = reader.ReadLine
                End While
            Finally
                If Not reader Is Nothing Then
                    reader.Close()
                End If
            End Try

            Catch ex As System.Exception
                System.Windows.Forms.MessageBox.Show(ex.Message, "Load Tool Data Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

Wiem że muszę zastosować warunek IF ale moje próby poki co są nieudane

Opublikowano

Przerobiłem ten Twój kod. Widziałem, że liczbę kolumn na sztywno wpisałeś 8, natomias w przykładzie który podałeś 

 

Witam. Po części zaczynam rozwiązywać problem. Póki co wczytuje sobie tekst do DataGridView, jednak mam taki problem. W pliku tekstowym niektóre linie są zakończone znakiem $ co świadczy że linia poniżej jest kontynuacją. Czyli przykładowo potrzebuję aby np taki tekst 

TOOLNO/1,TURN,1,0,3, 0.800000,$
0.000000, 0.000000, 0.300000,MMPR, 270.000000,SFM,$
CCLW,ON, 0.000000,NOTE

został wczytany do jednego wiersza a nie do trzech. Mógłby mi ktoś pomóc w tej kwestii bo moje próby są póki co nieskuteczne

 

tych kolum potrzeba aż 16, dlatego też z palca wpisałem liczbę kolumn 16.

    Dim PomocniczaZmienna As String = ""
    Dim separators() As Char = {",", "/", ":"}

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles Button1.Click
        OpenFileDialog1.ShowDialog()
        TextBox1.Text = OpenFileDialog1.FileName
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles Button2.Click
        Try
            Dim line As String
            Dim reader As IO.StreamReader = Nothing

            Dim NrOfCols As Integer = 0


            Try
                'tworzenie kolumn
                NrOfCols = 16

                For x = 0 To NrOfCols
                    Dim col As New DataGridViewTextBoxColumn
                    DataGridView1.Columns.Add(col)
                Next

                'czytanie pliku
                reader = New IO.StreamReader(OpenFileDialog1.FileName)

                line = reader.ReadLine

                While Not line Is Nothing
                    wczytywanie(line)
                    line = reader.ReadLine
                End While
            Finally
                If Not reader Is Nothing Then
                    reader.Close()
                End If
            End Try

        Catch ex As System.Exception
            System.Windows.Forms.MessageBox.Show(ex.Message, "Load Tool Data Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try


    End Sub

    Public Function wczytywanie(linijka As String)

        Dim OstatniZnak As Char = linijka(linijka.Length - 1)

        If OstatniZnak = "$" Then
            PomocniczaZmienna = PomocniczaZmienna + linijka.Substring(0, linijka.Length - 1)
        Else
            PomocniczaZmienna = PomocniczaZmienna + linijka
            Dim parts As String() = PomocniczaZmienna.Split(separators)
            DataGridView1.Rows.Add(parts)
            PomocniczaZmienna = ""
        End If
    End Function

Dodałem funkcję, która wpisuje dane do datagridview, oraz dwie zmienne (OstatniZnak i PomocniczaZmienna). Dwie zmienne zrobiłem globalne. Jeśli będziesz miał jeszcze jakieś pytanie, to pisz.

Opublikowano

Dzięki wielkie. Zapewne coś jeszcze bede miał bo mam kilka rzeczy do zrobienia a niestety moja wiedza jest znikoma w zakresie VB. Dzieki jeszcze raz

Opublikowano

Nie ma sprawy, ja też nie interesuję się VB, bardziej C#, jednak kiedy znasz jeden język programowania, to z drugim sobie poradzisz bez problemu, zajrzałem w dokumentację i Ci pomogłem. BTW cieszę się, że Ci pomogłem, ale mógłbyś mi dać "Lubię to" lub "najlepsza odpowiedź", tak dla formalności xD

Opublikowano

Dziś probuje walczyć z inna rzeczą, bardzo podobną z tym co mi pomogłeś, jednak moja wiedza nie pozwala mi na uzyskanie tego co bym chciał.

Bo mam taki fragment

RAPID
GOTO  /   21.70000,    0.00000,    5.00000
FEDRAT/    0.3000,MMPR
GOTO  /   21.70000,    0.00000,    4.00000
GOTO  /   21.70000,    0.00000,  -24.25000

i próbuje aby to słowo RAPID zostało wstawione, przeniesione przed GOTO, ale tylko do tego GOTO przed którym jest RAPID

 

To jest jedna kwestia, a druga to jak mógłbym teraz pozamieniać(przetłumaczyć) słowa zawarte w DataGridView np wszystkie GOTO na G1?

Opublikowano

Opisz to troszkę dokładniej, informatykowi musisz dać dokładną instrukcję, bo inaczej będzie się dopytywać xD

Poprzedni problem był wczytywany do datagridview1, te dane się różnią od poprzednich, mam więc rozumieć, że są to dwa oddzielne programy? W tym programie znowu są dane wczytywane z pliku do datagridview?

Opublikowano

Nie nie, to jest ten sam program. Czyli mam np taki fragment

 

TOOLNO/1,TURN,1,0,3, 0.800000,$
0.000000, 0.000000, 0.300000,MMPR, 270.000000,SFM,$
CCLW,ON, 0.000000,NOTE

RAPID
GOTO  /   21.70000,    0.00000,    5.00000
FEDRAT/    0.3000,MMPR
GOTO  /   21.70000,    0.00000,    4.00000
GOTO  /   21.70000,    0.00000,  -24.25000

 

no i chce go wczytać do datagridview tak aby jesli jest znak $ to wówczas żeby zapisywało to do jednego wiersza (to mamy ;)) a druga sprawa to jeśli pojawi się słowo RAPID, to żeby zostało ono przeniesione do wiersza poniżej przed słowo GOTO. Chce tak zrobić, bo później  samo słowo GOTO zamienić na G1 a RAPID GOTO na G0

Opublikowano

Łap ;)

Public Class Form1
    Dim PomocniczaZmienna As String = ""
    Dim separators() As Char = {",", "/", ":"}

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles Button1.Click
        OpenFileDialog1.ShowDialog()
        TextBox1.Text = OpenFileDialog1.FileName
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles Button2.Click
        Try
            Dim line As String
            Dim reader As IO.StreamReader = Nothing

            Dim NrOfCols As Integer = 0


            Try
                'tworzenie kolumn
                NrOfCols = 16

                For x = 0 To NrOfCols
                    Dim col As New DataGridViewTextBoxColumn
                    DataGridView1.Columns.Add(col)
                Next

                'czytanie pliku
                reader = New IO.StreamReader(OpenFileDialog1.FileName)

                line = reader.ReadLine

                While Not line Is Nothing
                    wczytywanie(line)
                    line = reader.ReadLine
                End While
            Finally
                If Not reader Is Nothing Then
                    reader.Close()
                End If
            End Try

        Catch ex As System.Exception
            System.Windows.Forms.MessageBox.Show(ex.Message, "Load Tool Data Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
        poprawka1()

    End Sub

    Public Function wczytywanie(linijka As String)

        Dim OstatniZnak As Char = linijka(linijka.Length - 1)
        Dim DwaPierwszeZnaki As String = linijka.Substring(0, 2)

        If Not DwaPierwszeZnaki = "$$" Then

            If OstatniZnak = "$" Then
                PomocniczaZmienna = PomocniczaZmienna + linijka.Substring(0, linijka.Length - 1)
            Else
                PomocniczaZmienna = PomocniczaZmienna + linijka
                Dim parts As String() = PomocniczaZmienna.Split(separators)
                DataGridView1.Rows.Add(parts)
                PomocniczaZmienna = ""
            End If

        End If
    End Function

    Public Function poprawka1()
        Dim PierwszaKolumna As String
        For index = 1 To DataGridView1.Rows.Count - 1

            If index < DataGridView1.Rows.Count Then

                PierwszaKolumna = DataGridView1.Rows(index - 1).Cells(0).Value
                If PierwszaKolumna = "RAPID" Then
                    DataGridView1.Rows(index).Cells(0).Value = "G0"
                    DataGridView1.Rows.Remove(DataGridView1.Rows(index - 1))
                    DataGridView1.Refresh()
                End If
                If PierwszaKolumna.Contains("GOTO") Then
                    DataGridView1.Rows(index - 1).Cells(0).Value = "G1"
                End If
            End If

        Next
    End Function

End Class

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...