PDAclub.pl - Forum użytkowników technologii mobilnych
Windows Mobile (Classic, Professional, Standard), Windows Phone 6.x oraz 7/8.x/10 => Oprogramowanie PPC => Dla programistów => Wątek zaczęty przez: kielnia w Maj 29, 2006, 13:42:15
-
Witam.
Mam dosyć spory problem z odczytem danych z pliku jeśli chodzi o eVC 4.0.
Napisałem pewną niewielką aplikację która wykonuje obliczenia na podstawie danych wprowadzanych z plików (czeterech) w Dev-Cpp 4.9.9.2 i program mi działa. Chcę teraz użyć kodu tego programu jako pewien "moduł" prowadzący obliczenia w mojej aplikacji na PPC. EVC kompiluje kod ale niestety nie działa mi to jak należy. Sprawdziłem że program wiesza się jak ma wczytywać dane z pliku. Dodam że używałem do wczytywania danych z plików tablic struktur - później było łatwo odwoływać mi sie do poszczególnych komórek pamieci z danymi.
podam część mojego kodu
struct liczbyLovea
{
double G0;
double GP;
double GM;
double h0;
double hP;
double hM;
double k0;
double kP;
double kM;
double l0;
double lP;
double lM;
double szerP;
double szerM;
} tablicaDanych[12];
int i, iZwrot;
FILE *plik;
//--------------------------------------------------------------------------
plik = fopen("liczbyLovea.txt","r");
while(!feof(plik))
{
for(i = 0; i < 12; i++)
{
iZwrot = fscanf(plik,"%lf",&tablicaDanych[i].G0);
if (iZwrot == EOF)
{
break;
}
iZwrot = fscanf(plik,"%lf",&tablicaDanych[i].GP);
iZwrot = fscanf(plik,"%lf",&tablicaDanych[i].GM);
iZwrot = fscanf(plik,"%lf",&tablicaDanych[i].h0);
iZwrot = fscanf(plik,"%lf",&tablicaDanych[i].hP);
iZwrot = fscanf(plik,"%lf",&tablicaDanych[i].hM);
iZwrot = fscanf(plik,"%lf",&tablicaDanych[i].k0);
iZwrot = fscanf(plik,"%lf",&tablicaDanych[i].kP);
iZwrot = fscanf(plik,"%lf",&tablicaDanych[i].kM);
iZwrot = fscanf(plik,"%lf",&tablicaDanych[i].l0);
iZwrot = fscanf(plik,"%lf",&tablicaDanych[i].lP);
iZwrot = fscanf(plik,"%lf",&tablicaDanych[i].lM);
iZwrot = fscanf(plik,"%lf",&tablicaDanych[i].szerP);
iZwrot = fscanf(plik,"%lf",&tablicaDanych[i].szerM);
}
}
fclose(plik);
A plik wygląda tak:
1.1576 -0.0016 0.0054 0.6165 0.0007 0.0018 0.3068 0.0015 -0.0004 0.0840 -0.0020 0.0000 0.0000 0.0000
1.1542 -0.0018 0.0000 0.6069 0.0007 0.0000 0.3009 0.0014 0.0000 0.0841 -0.0020 0.0000 0.0000 0.0000
1.1600 -0.0010 0.0000 0.6133 0.0005 0.0000 0.3034 0.0009 0.0000 0.0852 -0.001 0.0000 0.0000 0.0000
1.0728 0.0000 0.0000 0.2946 0.0000 0.0000 0.0942 0.0000 0.0000 0.0149 0.0000 0.0000 0.0000 0.0000
1.0728 0.0000 0.0000 0.2946 0.0000 0.0000 0.0942 0.0000 0.0000 0.0149 0.0000 0.0000 0.0000 0.0000
1.0728 0.0000 0.0000 0.2946 0.0000 0.0000 0.0942 0.0000 0.0000 0.0149 0.0000 0.0000 0.0000 0.0000
1.0728 -0.0010 0.0000 0.2946 0.0003 0.0000 0.0942 0.0007 0.0000 0.0149 0.0000 0.0000 0.0000 0.0000
1.0363 0.0000 0.0000 0.1807 0.0000 0.0000 0.0427 0.0000 0.0000 0.0100 0.0000 0.0000 0.0000 0.0000
1.0363 0.0000 0.0000 0.1807 0.0000 0.0000 0.0427 0.0000 0.0000 0.0100 0.0000 0.0000 0.0000 0.0000
1.0363 0.0000 0.0000 0.1807 0.0000 0.0000 0.0427 0.0000 0.0000 0.0100 0.0000 0.0000 0.0000 0.0000
1.0363 0.0000 0.0000 0.1807 0.0000 0.0000 0.0427 0.0000 0.0000 0.0100 0.0000 0.0000 0.0000 0.0000
1.0363 -0.000315 0.0000 0.1807 0.00015 0.0000 0.0427 0.00066 0.0000 0.0100 0.0000 0.0000 0.0000 0.0000
Dane pooddzielane są w pliku tabulatorami.
Może ktoś cos poradzi.
Pozdrawiam.
-
Kolega fp na priv odpowiedział mi że może być problem z otwieraniem pliku. Napisał mi że powinno być:
plik = fopen("\\JakisKatalog\\liczbyLovea.txt","rt");
a nie
plik = fopen("liczbyLovea.txt","r");
Dodam że jak wciska sie przycisk w eVC 4.0 Execute (brązowy wykrzyknik) to program ląduje w My Device (jeśli się nic nie pozmienia w ustawieniach eVC - jesli się nie myle). Tam też dzieki mapowaniu folderu jako karty pamieci przekopiowałem pliki textowe. <-- Z tym mapowaniem to tyczy się emulatora. Stąd wynika że program i pliki textowe sa w "jednym katalodu". Pliki textowe tworzyłem na kompie - są w kodowaniu ASCII. Może tu siedzi cały szkopuł bo jeśli się nie myle to natywnym kodowaniem dla PPC jest UNICODE.
Może problem siedzi gdzie indziej. Może ktoś wypowie się na ten temat a nie będzie sie tyko przyglądał.
Pozdrawiam.
-
TCHAR sciezka[256]; // sciezka do naszego exe
char pelna_sciezka[256]; // sciezka do naszego pliku
GetModuleFileName(NULL, sciezka, 256);
TCHAR *pos = wcsrchr(sciezka, '\\');
*(pos + 1) = '\0';
wcstombs(pelna_sciezka, sciezka, 256);
strcat(pelna_sciezka, "liczbyLovea.txt");
file = fopen(pelna_sciezka,"rt");
Problem z windows mobile polega na tym ze windows nie utrzymuje informacji o aktualnej pozycji drzewa katalogow w ktorym sie znajdujemy...
Wiec "GetModuleFileName(NULL, sciezka, 256);" daje nam pelna sciezke do anszego pliku exe programu, ucinamy ten lancuch o nazwe pliku exe, wstawiamy nazwe pliku ktory chcemy otworzyc i otwieramy go :)
-
A ja bym w ogóle radził robić kontrolę błędów otwierania plików - potem nie ma problemów typu dlaczego się dziwnie zawiesza. ;)
-
hehe no fakt :) Ja podalem "sposob" jak otwierac :) Moj kod nie byl podany tak zeby go do razu wprowadzac do jakiegos projektu :P
Ten kod musi 100% dzialac :) No chyba ze plik nazywa sie inaczej :P