Liczba postów: 856
Liczba wątków: 2
Dołączył: Nov 2017
(01-11-2018, 00:49)wchpikus napisał(a): Nie wiem jakie jest ograniczenie, nie sadze ze pliki ze srednia ok 40 znakow zapelniaja caly flash 3M...
Aby odpowiedzieć na to pytanie trzeba wiedzieć jak działa system plików i jakiej wielkości jest sektor. Typowo, ARM mają sektory po 1..2kB. 146plików o wielkości od 1..2kB zajmie więc max 300kB,ale jesli sektory sa po 16kB to blisko 2,4MB. Do tego dochodzi pojemność zajmowana przez katalogi.
Liczba postów: 654
Liczba wątków: 3
Dołączył: Apr 2017
Reputacja:
51
W jakim formacie masz te dane?
vcard, json itp...
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.
Liczba postów: 71
Liczba wątków: 2
Dołączył: Oct 2018
Reputacja:
1
01-11-2018, 23:58
(Ten post był ostatnio modyfikowany: 02-11-2018, 00:00 przez wchpikus.)
format zapisywany na spiffs juz jest obrobiony z vcard,
wycięte niepotrzebne rzeczy, zostaje tylko numer i nazwa,oddzielone:
String x = (">");
String y = ("<");
String z = ("$");
link= (z+contact_phone+x+contact_name+y);
phonebook_memory += (link); //zapis do pliku, po zakonczonej transmisji zapis do spiffs (utylizacja phonebook_memory)
zaczyna sie od $,numer,>, nazwa,< .
taki ciag jest dla kazdego kontaktu.
Wystarczy zczytac od 1 do 2 "$" i mamy jeden kontakt.
Liczba postów: 856
Liczba wątków: 2
Dołączył: Nov 2017
Rekordy zakańczaj przez CRLF. W Arduino, zdaje się jest funkcja czytająca jedną linie tekstu,w tym wypadku rekord. Jeśli nie ma to sobie ją napiszesz. Plik możesz czytać od dowolnego miejsca, dowolną liczbę znaków.
Jeśli chcesz przyspieszyć operacje na bazie (raczej nie widzę tu takiej potrzeby), to tworzysz dodatkowy plik z indeksami, lub indeksy umieszczasz na początku pliku bazy,
Liczba postów: 856
Liczba wątków: 2
Dołączył: Nov 2017
(02-11-2018, 00:43)wchpikus napisał(a): Czyli powinno byc:
f.print("xxx"); // bez konca linii
f.println("xxx"); // z koncem lini i nastepna zapisze w nowej linii?
Dokładnie o to chodzi.
PS
Jedyny kumaty na tym forum. Aż przyjemnie pomagać.
PS2
Z pewnych powodów nie jestem wykładowcom (na nauczyciela nie mam wykształcenia - nawet się rymuje). Klauzula sumienia, nie pozwalał by mi promować leserów, a jak bym oblewał 90% uczniów, to by mnie ze szkoły wywalili, bo za każdego łebka jest kasa (nawet w podstawówce). Nie łudzicie się wiec uczniowie, że nauczyciele was kochają, kochają kasę. Ci nauczyciele (przeważnie nauczycielki, one są głupsze) co wybiegają przed szereg, szybko kończą karierę i zasilają szeregi ......agencji towarzyskich. Dobrze sprawdzają się w roli domin (nie chodzi o grę w domino).
Liczba postów: 856
Liczba wątków: 2
Dołączył: Nov 2017
Działa, już jakiś sukces.
Teraz zadbaj o kontrolę błędów. 99,9% programów Arduinowych "rozwalam" właśnie na braku ich kontroli.
Poważnie zastanów się nad porzuceniem Arduino. Potrafisz logicznie myśleć (w przeciwieństwie to 90% Aduinowców), szkoda Cie na ten chłam Ardunio.
Gdy zaczniesz używać debugera, programy będziesz pisał kilka razy szybciej niż teraz.
Liczba postów: 71
Liczba wątków: 2
Dołączył: Oct 2018
Reputacja:
1
03-11-2018, 17:39
(Ten post był ostatnio modyfikowany: 04-11-2018, 18:54 przez wchpikus.)
ok udało się to ogarnąć.
String read_contact_campare(String file_name,String callerid_number){
String file = ("/"+ (String)file_name+".txt");
// int heap = ESP.getFreeHeap();
// Serial.print("memory enable przed ");Serial.println(heap);
// Serial.print("file name = ");Serial.println(file);
File myfile = SPIFFS.open(file, "r");
if (!myfile) {
Serial.println("file open failed");
}
else
{
Serial.println("file campare ok!");
Serial.println("reading data..searching contact..");
while (myfile.available()){
String campare =myfile.readString(); // czytam plik
int numer_start = campare.indexOf(callerid_number); //pozycja numer start
// Serial.print("contact start on "); Serial.println(numer_start);
int nazwa_start = campare.indexOf('>',numer_start); //pozycja nazwa start
int nazwa_koniec = campare.indexOf('<',numer_start); //pozycja nazwa stop
int numer_stop = campare.indexOf('>',numer_start); //pozycja numer stop
String number_phonebook = campare.substring(numer_start,numer_stop); // numer od znaku > do <
int number_phonebook_leng = (number_phonebook.length()-1); //dlugosc numeru w ksiazce -1
int callerid_number_leng = callerid_number.length(); //dlugosc przychodzacego numeru
if ( (nazwa_start != -1) && (nazwa_koniec != -1) && (callerid_number_leng == number_phonebook_leng)){ //jesli znajdzie miejsce w ksiazce oraz dlugosc jest taka sama
callerid_name = campare.substring(nazwa_start+1,nazwa_koniec); // nazwa od znaku > do <
Serial.println("phone_name finded");
}
else
{
Serial.println("phone_name not finded");
callerid_name = callerid_number;
}
campare="";
file="";
myfile.close();
}
}
return (callerid_name);
Poprawiłem kilka rzeczy, teraz działa od strzała.