Odczyt słów z pliku i zapis do textbox

Odpowiedz Nowy wątek
2012-07-25 03:24
0

Witam.
Prosiłbym o pomoc w programie C# (Windows Forms Application). Mianowicie chciałbym zrobić prosty programik,
który odczyta plik .txt i wyświetli jego "słowa" w Form1 (np. w automatycznie wygenerowanych textbox-ach).
Plik txt posiada dane np.

1,coś tam,"zakupy", 25.49,[NAGŁÓWEK]
"PW",2.88/152,ZATWIERDZONY

dane są pooddzielane przecinkiem ",".
Siedzę nad tym już trzeci dzień i nic nie mogę stworzyć :(
Oto co udało mi się skleić :/
plik otwieram OpenFileDialog-iem i mam przykładowo 1 linię z 18 danymi.

private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog okienko = new OpenFileDialog();
            okienko.Filter = "Pliki (txt)|*.txt"; // format otwieranego pliku

            if (okienko.ShowDialog() == DialogResult.OK)
            {
                MessageBox.Show("Wybrano plik: " + okienko.FileName); // akceptacja pliku

            }

            using (StreamReader reader = new StreamReader(okienko.FileName))
            {
                string line;
                this.tableLayoutPanel1.Controls.Clear(); // czyszczenie kontrolek

                while ((line = reader.ReadLine()) != null)
                {

                        string[] data = line.Split(','); // odczytanie słowa do momentu przerwania ","

                            for (int u = 0; u <= 17; u++) 
                // 18 elementów <------- a chciałbym żeby automatycznie przeliczał ile słow jest w lini
                            {
                                TextBox txt = new TextBox();
                                txt.Name = String.Format("txt{0}", (u+1)); 
                // (u+1)  czyli zaczynanie od textBox1, bo u = 0 i też nie jestem pewien czy to dobry pomysł
                                txt.Text = data[u]; // wczytanie słowa

                                this.tableLayoutPanel1.Controls.Add(txt, (u+1),0); // dodanie textbox-a do tableLayoutPanel1
                            }  
                }
            }

        }

Do wyświetlenia użyłem tableLayoutPanel i wyświetla mi tylko pierwszego textbox-a z pierwszą daną :(
Chciałbym żeby dostęp do danych był jak najłatwiejszy (np. dana 1 = textBox1, dana 2 = textBox2 itp.)
Proszę o pomoc.

Pozostało 580 znaków

2012-07-25 08:28
0

Na pierwszy rzut oka wszystko wygląda ok. Rozumiem, że panel jest na tyle duży, żeby zmieścić te kontrolki? I też panel w którym się ten znajduje?
Co do pętli to wystarczy w warunku umieścić: u < dane.Length

edytowany 1x, ostatnio: Sarrus, 2012-07-25 08:29

Pozostało 580 znaków

2012-07-25 16:01
0

Kontrolka tableLayoutPanel1 ma ustawioną wartość AutoScroll (true).
Wyświetla pierwszy textbox z pierwszym słowem, ale następne textbox-y są dużo niżej :/
Nie wiem dlaczego nie wyświetla wszystkich textbox-ów w kolumnie jeden po drugim tylko pierwszy na górze, a resztę od dołu :/

Pozostało 580 znaków

2012-07-25 17:07
0

RowCount i GrowStyle masz dobrze ustawione? Próbowałeś zmieniać RowStyles dla dodawanych wierszy?


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2012-07-25 20:20
0

GrowStyle ustawione jest na "AddRows", a RowCount " 1".
Nie wiem dokładnie jak to działa próbowałem metodą prób i błędów, ale bez skutku :(
Może jest jakaś inna łatwiejsza metoda rozwiązania mojego problemu?
Proszę o pomoc.

Pozostało 580 znaków

2012-07-26 00:33
0

może lepiej użyć komponentu typu ListView czy nie wiem jak to w c# się nazywa

Pozostało 580 znaków

2012-07-26 01:15
0

Witam

Prawdopodobnie może się rozjeżdżać właśnie przez to (u+1)

 this.tableLayoutPanel1.Controls.Add(txt, (u+1),0) 

Jeśli u to ma być nr kolumny to powinno wyglądać to tak:

 this.tableLayoutPanel1.Controls.Add(txt, u ,0) 

Pozdrawiam
Marcin

edytowany 2x, ostatnio: marcin.NET, 2012-07-26 01:32

Pozostało 580 znaków

2012-07-26 01:23
0

To tez nie działa :(
Stworzyłem ręcznie textbox-y w formatce, a słowa (dane) przypisałem do tablicy.
Teraz mój problem polega na tym, żeby nie wypisywać pojedyńczo
textBox1.Text = slowo[0];
textBox2.Text = slowo[1]; itp
tylko użyć jakiejś petli, by wczytała sama nazwy textbox-ów i przypisała do nich kolejno słowa coś w stylu

for (int i = 0; i<10;i++) 
{ 
textBox(i).Text = slowo[i] 
}

Nie wiem jak zrobić podobnie działającą pętlę. Błagam o pomoc :(

Pozostało 580 znaków

2012-07-26 01:51
0

Powinno działać i wyświetlać się także równo.

            string[] tab={"asdasd","3274","[email protected]#$","ASD#%#$","sdjsj","jsak","rterte","asdasd","wer","ortp"};
            for (int i = 0; i < 10; i++)
            {
                TextBox txt = new TextBox();
                //txt.Name = "asdasd";
                this.tableLayoutPanel1.Controls.Add(txt, i, 0);
                this.tableLayoutPanel1.AutoSize = true;
                this.tableLayoutPanel1.AutoSizeMode = AutoSizeMode.GrowOnly;
                txt.Text = tab[i];
                TableLayoutRowStyleCollection styles=this.tableLayoutPanel1.RowStyles;               
                foreach (RowStyle style in styles)
                {
                    style.SizeType = SizeType.AutoSize;
                }
            }
Dodatkowo dla głównego Form'a należy dać autosize=true i sizemode=GrowAndShring - marcin.NET 2012-07-26 01:53

Pozostało 580 znaków

2012-07-26 02:02
0

Tylko, że wszystkie textboxy są umieszczone na tabControl1.

tzn? rozwiń, bo nie rozumiem co to znaczy, że wszystkie textboxy są umieszczone na tabControl1. - marcin.NET 2012-07-26 02:14
mają być na różnych panelach? każdy na innym tableLayoutPanel1, tableLayoutPanel2, itp? - marcin.NET 2012-07-26 02:19
Już wszystko jest ok :) Dziękuję bardzo za pomoc :) Textbox-y wrzuciłem do tableLayoutPanel1 i zmieniłem string[] tab na string slowo :) - Rafal_ql 2012-07-26 02:20

Pozostało 580 znaków

2012-07-26 02:44
0

Następny problem z edycją plików to zapis danych z textbox-ów do pliku .txt
A żeby nie było łatwo, to każde dane mają mieć określoną długość znaków (spacja to też znak) np.
W programie mam 3 textBox-y z danymi:

textBox1 = "Warszawa"; (8 znaków)
textBox2 = "Park Miejski Lato" (17 znaków)
textBox3 = "MSK\001\65" (10 znaków)

I problem polega na zapisaniu tych danych (oczywiście jest ich dużo więcej) do pliku txt z odpowiednią ilością znaków do zapisania np
plik txt wyglądać powinien w ten sposób:

w teorii:
Miasto ( max 20 znaków)
Miejsce( max 20 znaków)
Numer ( 10 znaków)

w praktyce:
Warszawa++++++++++++ Park Miejski Lato+++ MSK\001\65
( znak (+) oznacza spację) Każde słowo w pliku musi mieć określoną długość znaków( może być miej ale nie więcej) i oddzielone jest spacją.

Trochę to zagmatwane, ale chcę wyciągnąć dane z jednego pliku i posklejać te dane w plik txt, do odczytu z innego programu.
Jeżeli komuś wpadnie coś do głowy, to baaaardzo proszę o pomoc.
Dziękuje za dotychczasowe podpowiedzi i mam nadzieję, że ktoś wpadnie na rozwiązanie tego szalonego pomysłu :)

Jednym słowem próbujesz napisać program do przetwarzania danych dla EDI ;)? - marcin.NET 2012-07-26 22:17

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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