.txt do Listboxu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

.txt do Listboxu – C / C++ – Fórum – Programujte.com.txt do Listboxu – C / C++ – Fórum – Programujte.com

 

Kano.net0
Newbie
11. 5. 2014   #1
-
0
-

Ahoj

Mám .txt soubor a potřebuji z něj automaticky načíst text do listboxu při spuštění programu. Už sem zkoušel všechno možný co sem našel na netu a nejsem schopný to udělat. Mohl by mi někdo ukázat nějaké primitivní funkční řešení? Dík moc

V souboru je text psaný pod sebe v řádcích...

text1

text2

text3

Nahlásit jako SPAM
IP: 77.48.209.–
Radek Chalupa
~ Redaktor
+1
Super člen
11. 5. 2014   #2
-
0
-

#1 Kano.net
CreateFile

GetFileSize - naalokovat buffer typu wchar_t* nebo char* (podle toho zda je soubor v unicode) na zjištěnou velikost 

ReadFile (načíst celý soubor do textového bufferu)

Pomocí wcstok nebo strtok, kde oddělovačem bude "\r\n" získávat jednotlivé řádky a ty pak přidávat do listboxu:

SendMessage(hwnd_lb, LB_ADDSTRING, 0, (LPARAM)ziskany_radek);

Radek Chalupa 
- individuální konzultace a školení programování (C/C++, C#, WinAPI, COM, ATL, ActiveX, NET Framework, MFC)
- vývoj software na zakázku 
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
Kano.net0
Newbie
11. 5. 2014   #3
-
0
-

tak to je na mě složité....Ale děkuji

Nahlásit jako SPAM
IP: 77.48.209.–
Radek Chalupa
~ Redaktor
+1
Super člen
12. 5. 2014   #4
-
0
-

#3 Kano.net
Takže nějak takhle, předpoklad že text je ANSI (pro unicode by se použil typ wchar_t): 

HANDLE h = CreateFile(L"test.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if (h == INVALID_HANDLE_VALUE)
	return;
DWORD sz = GetFileSize(h, NULL);
char* ptext = (char*)HeapAlloc(GetProcessHeap(), 0, sz + 1);
ptext[sz] = '\0';
DWORD dw;
ReadFile(h, ptext, sz, &dw, NULL);
CloseHandle(h);
char oddel[] = "\r\n";
char* radek = strtok(ptext, oddel);
while (radek)
{
	SendMessageA(hwnd_listbox, LB_ADDSTRING, 0, (LPARAM)radek);
	radek = strtok(NULL, oddel);
}
HeapFree(GetProcessHeap(), 0, ptext);

Radek Chalupa 
- individuální konzultace a školení programování (C/C++, C#, WinAPI, COM, ATL, ActiveX, NET Framework, MFC)
- vývoj software na zakázku 
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
Kano.net0
Newbie
12. 5. 2014   #5
-
0
-

#4 Radek Chalupa

Tak sem to zkoušel. Nevím jestli dělám něco blbě, nebo jestli mi chybí nějaká knihovna, ale vyhodilo mi to asi 25 chyb a skoro žádný z těch příkazů to nezná. Jsemu začátečník a programuju ve visualu c++ 2008

Nahlásit jako SPAM
IP: 77.48.209.–
Kano.net0
Newbie
12. 5. 2014   #6
-
0
-

Tak nakonec sem zavrhl listbox a místo něj sem využil datagridview.

private: System::Void button4_Click_1(System::Object^  sender, System::EventArgs^  e) {
               {
       StreamReader^ sr = gcnew StreamReader("testfile.txt");
       while ( sr->Peek() >= 0 )
       {
         dataGridView1->Rows->Add(sr->ReadLine());
       }
       sr->Close();

Funguje mi to, ale v textovém souboru mám vždy tři sloupce s textem oddělené mezerou a potřebuju je vypsat do tří různých sloupců v datagridview, ale tak jak to mám se mi všechny vypíšou do toho prvního. Víte někdo jak to předělat?

Nahlásit jako SPAM
IP: 77.48.209.–
Radek Chalupa
~ Redaktor
+1
Super člen
12. 5. 2014   #7
-
0
-

#6 Kano.net
Nojo, neřekl jsi že je to v C++/CLI a .NET...  

Radek Chalupa 
- individuální konzultace a školení programování (C/C++, C#, WinAPI, COM, ATL, ActiveX, NET Framework, MFC)
- vývoj software na zakázku 
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
Kano.net0
Newbie
12. 5. 2014   #8
-
0
-

#7 Radek Chalupa
to nevadí, s tím druhým problém si víš rady?

Nahlásit jako SPAM
IP: 77.48.209.–
Radek Chalupa
~ Redaktor
+1
Super člen
12. 5. 2014   #9
-
0
-

#8 Kano.net
Tohle je spíš pro fórum .NET, ale co vím z hlavy tak String má metodu Split, která ti ho rozkouskuje podle zadaného oddělovače (v tvém případě ty mezery) a pokud jde o ten grid, tak myslím že Rows.Add podporuje víc parametrů, což jsou jednotlivé sloupce, tj. Rows,Add("první", "druhý", "...

Doporučuji více používat dokumentaci, tohle tam určitě najdeš:-)

Radek Chalupa 
- individuální konzultace a školení programování (C/C++, C#, WinAPI, COM, ATL, ActiveX, NET Framework, MFC)
- vývoj software na zakázku 
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 10 hostů

Podobná vlákna

Vkládání do listboxu — založil wickzig

Z Listboxu do StringGridu — založil Veru

C# Diakritika v listboxu — založil krpik

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý