ďťż

Ładny brzuch

Potrzebuje zrobic tablice wskaznikow do c-stringow za pomoca operatora new ale musze wiedziec ile dany plik ma linijek. No chyba ze da sie inaczej.




Potrzebuje zrobic tablice wskaznikow do c-stringow za pomoca operatora new ale musze wiedziec ile dany plik ma linijek. No chyba ze da sie inaczej.
Sprawdzenie ile linijek - bez wczytania i sprawdzenia (\n || \r\n) raczej sie nie da....
A co do tablicy to raczej nie pomoge, bo nie wiem co to c-string (za malo c znam ;)).


Potrzebuje zrobic tablice wskaznikow do c-stringow za pomoca operatora new ale musze wiedziec ile dany plik ma linijek. No chyba ze da sie inaczej.
Nie widzę związku..
Tablica wskaźników:char wsk* = new char[20];
Co do tych linijek to np. tak:int linijek; string dane; fstream plik; while(std::getline(plik,dane,'\n')) { linijek++ }

ano to ja tobie na to tak:

Chce wczytac dowolnej wielkosci playliste m3u, dlatego chce wiedziec ile ma ona linijek zeby dynamicznie ja stworzyc, dzieki temu pomiesci ona kazda liczbe piosenek.

Powiadasz fstream, ano sprobuje ale jutro. Dzis sie juz napracowalem. W podpisie zamieszczam stronke z ktorej mozna sciagnac program. W chwili obecnej stara wersja ale dopiero szykuje nowa.




ano to ja tobie na to tak:

Chce wczytac dowolnej wielkosci playliste m3u, dlatego chce wiedziec ile ma ona linijek zeby dynamicznie ja stworzyc, dzieki temu pomiesci ona kazda liczbe piosenek.

Powiadasz fstream, ano sprobuje ale jutro. Dzis sie juz napracowalem. W podpisie zamieszczam stronke z ktorej mozna sciagnac program. W chwili obecnej stara wersja ale dopiero szykuje nowa.

Nie do konca rozumiem. Wczytujesz liste z pliku, tak? To dla czego nie mozesz zmieniac rozmiaru tablicy na biezaco?

// ort
Użytkownik Ali240 edytował ten post 29 styczeń 2007, 21:29
Moze uzyj vectora? ;)

i tu was moze odpowiedz zdziwic bo jest tak:

Zaczalem czytac Grebosza (Symfonie) jakies 1.5 miesiaca temu i jeszcze jej nie skonczylem, siedze na przeladowaniu operatorow(przed operacjami wejscia/wyjscia. Program robie aby utrwalic sobie wiadomosci oraz dlatego ze mnie ciagnie zeby napisac cos swojego :). Po rozdziale IO pewnie udaloby mi sie znalezc rozwiazanie ( przegladalem i szukalem ale bez czytania to nie to samo) ale wole czytac od poczatku do konca. :)

Nie wiem czy z tym wczytywaniem Ci wyjdzie, bo teraz sobię tak patrzę na te m3u i w zależności jakie info ma plik tyle linijek zajmuje dany utwór - niektóre mają jedną inne trzy, a najczęściej dwie :)
Chyba, że zignorujesz dodatkowe informacje. Każda z nich zaczyna się na "#EXTINF" więc możesz po prostu to wyżucać i przeskakiwać do następnej linijki ;)

@down
Ja sprawdzałem na Winampowej :)
Użytkownik KlyYmek edytował ten post 30 styczeń 2007, 14:48
Ja mam pliczek m3u (nie inny) tyle ze generowany z foobara, ale zawiera tylko ścieżki do poszczególnych utworów.


Ja mam pliczek m3u (nie inny) tyle ze generowany z foobara, ale zawiera tylko ścieżki do poszczególnych utworów.
Więc nie ma problemu teraz. Możesz wykorzystać to co napisałem wyżej:
int linijek; string dane; fstream plik; while(std::getline(plik,dane,'\n')) { linijek++; } char wsk* = new char[linijek];
I masz tyle wskaźników na ścieżki ile jest linijek w pliku :)

tę funkcję wykorzystałem nieco inaczej ale sens ten sam

Dzięki temu programowi utrwaliłem wiele rzeczy:
Zacząłem tworzyć klasę z konstruktorami, stworzyłem dzięki temu tablice za pomocą operatora new, wskaźnik do niej, konwersje.

Tylko ze przy kompilacji wyskakuje mi undefined reference to 'nazwaklasy::nazwaklasy()'

co to może oznaczać??

Napewno masz taką samą deklaracje konstruktora jaki i jego definicję (chodzi o argumenty)?
Pokaż kod.
Użytkownik KlyYmek edytował ten post 30 styczeń 2007, 17:34
#ifndef __PLAYLISTA__ #define __PLAYLISTA__ #include <string> using namespace std; class playlista { public: string nazwa; // nazwa Pliku (bez D:\ \ \ oraz bez rozszerzenia) string sciezka; // adres do pliku ( z tymi bajerami pominietymi w nazwie playlista(string adres); //konstruktor zwykly( do przypisania nazwy i adresu) playlista(void); // pusty konstruktor niezbedny do stworzenia tablicy dynamicznej operator string() // operator konwersji niezbedny mi (otrzebuje wyslac gdzies sciezke) { return nazwa; } }; // definicja konstruktora ktory inicjalizuje adres oraz wybiera pestke z owocu (nazwe) playlista::playlista(string adres) : sciezka(adres) { nazwa = adres.substr(adres.find_last_of('/')); nazwa.erase(nazwa.find_first_of('.')); } #endif

Proszę bardzo kod klasy

// edit
ruszyla dodalem tylko definicje konstruktora domniemanego ( a jednak), tylko ze w chwili obecnej sie wylacza ale troszke poprawie i powinno grac:)

//edit 2

Musze wywalic kontruktor bo jest zbedny a to co on robi wsadze do funkcji

//edit 3

Korzystajac z debuggera( bo kompiluje sie i gra tylko ze) odkrylem ze program mi wywala blad w tym miejscu w kodzie.

while(getline(odczyt, linia))
{
lista[i].sciezka = linia;
lista[i].nazwa = linia.substr(linia.find_last_of('/'));
i++;
}
ma to na celu przypisanie skladnikowi sciezka (sciezki) oraz wyciagniecie ze stringu koncowki czyli nazwa.mp3 i przypisanie jej do nazwy
oraz postinkrementacje i

//edit 4

psuje sie w tym miejscu : .substr(linia.find_last_of('/'));

//edit 5

dziala :)

to jest to

na dowod wam daje tylko nie oczekujcie zbyt wiele od tego,
ma liczne bugi nie jest skonczony ale to co chcialem sie udalo,

1. nie wczytywac listy po raz drugi ( brak opcji delete do tablicy :P)
2. wsadzic liste do katalogu zeta i wtedy podac nazwe (nazwa.m3u) :)

jesli chcecie zobaczyc dalsze wyniki zapraszam na moja strone, mysle ze w weekend dobrze popracuje nad tym :)
Użytkownik Netrix edytował ten post 30 styczeń 2007, 19:18
Tym razem nie wyedytuje, tylko pod tym samym tematem.

Otoz zacząłem robić funkcje ktora bedzie czytac liste utworow z tej tabelki, wypisywac na ekranie, pytac o numer i wybierac ta piosenke.

w funkcji wczytujacej bylo cos takiego
for(int i = 0; i < ile_linijek(m3u); i++) { cout << (i + 1) << ". " << lista[i].nazwa << endl; }

oczywiscie to dzialalo ale:

zeby odniesc sie do tej tablicy ktora stworzyłem tak:
playlista * const lista = new playlista[ile_linijek(m3u)];

musiałem napisac deklaracje
playlista * lista;

no i chcac uzyc tej samej petli co w poprzedniej funkji (kompiluje sie i uruchamia), ale wyskakuje windowsowy error w momencie gdy na ekranie jest
1.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •