Yeterince yüksek, müşteriler yapmak istiyor mal ithalatı onların fiyat listelerinden. Sadece siteye yeni bir ürün ekleyebilmeleri değil, aynı zamanda depodaki mevcut ürünlerin fiyatlarını ve miktarını da güncelleyebilmeleri gerekiyor.
PHP'nin yapabileceği bilinmiyor excel dosyalarıyla çalışma standart anlamına gelir. Elbette excel'de bilgi okuyup yazabilen birçok farklı sınıf var ama bunlarla ilgili bir çok problem var (bunun hakkında ilerideki yazılarda yazacağız).
Çok daha kolay ve daha uygun csv dosyalarıyla çalışma.
Örneğin küçük bir program yapalım. OX2.ru çalışanlarının csv dosyasını işleyecektir.
Excel'de aşağıdaki alanları içeren yeni bir elektronik tablo oluşturalım:
Tabloyu ";" alan ayırıcısı ile csv dosyası olarak kaydedelim.
Bunun gibi bir dosyamız olmalı:
"Ivanov A.A."; "OX2.ru şirketinin programcısı"; 89255552332 "Sidorov A.E."; "OX2.ru şirketinin tasarımı"; 89161231212 "Pirozhkov A.B."; "OX2.ru'nun sanat yönetmeni"; 84951232121 "Kulibin BA "; "Yönetici OX2.ru"; 89031233333
Aşağıda ayrıntılı bir açıklama ile kaynak kodudur.
Kod OOP ile yazılmıştır. sınıfları kullanmak ve küçük bir değişiklikle çeşitli uygulamalarda yeniden kullanılabilir. Sınıflarda programlamaya alışkın değilseniz, ancak işlevleri veya başka bir şeyi kullanıyorsanız, yeniden eğitim almanızı şiddetle tavsiye ederiz))
Kod ayrıca istisnaların oluşturulmasını da kullanır (İstisna), sonraki makalelerimizde onlar hakkında okuyun.
_csv_file = $ csv_file; // Dosyanın yolunu bir değişkene yazın) else (// Dosya bulunamazsa bir istisna atın yeni İstisna atmak ("Dosya" $ csv_file "bulunamadı");)) genel işlev setCSV (Dizi) $ csv) (// csv'yi ön kayıt için aç, // w'yi belirtirsen, csv'deki bilgilerin üzerine yazılır $ handle = fopen ($ this -> _ csv_file, "a"); foreach ($ csv $ değeri olarak) (// Diziyi geçiyoruz // Yazıyoruz, 3. parametre alan ayırıcıdır fputcsv ($ handle, patlat (";", $ value), ";");) fclose ($ handle) ); // Kapat) / ** * csv- dosyasından okuma yöntemi. csv * @return dizisindeki verileri içeren bir dizi döndürür; * / public function getCSV () ($ handle = fopen ($ this -> _ csv_file, "r"); // Okumak için csv'yi açın $ array_line_full = array (); // Dizi, csv'den gelen verileri depolayacaktır // Tüm csv -dosyasını gözden geçirin ve satır satır okuyun 3. parametre alan ayırıcı while (($ satır = fgetcsv ($ tutamaç, 0, ";"))! == YANLIŞ) ($ array_line_full = $ satır; // Satırları diziye yaz) fclose ($ tanıtıcı); // Dosyayı kapat return $ array_line_full; // Okunan verileri döndür)) dene ($ csv = new CSV ("ox2.csv"); // csv'mizi aç / ** * CSV'den oku (ve ekrana güzel çıktı) * / echo "
Kayıttan önce CSV:
"; $ get_csv = $ csv-> getCSV (); foreach ($ değeri olarak $ get_csv) (// Satırlarda döngü eko" Ad: ". $ değer.""; echo" Başlık: ". $ değer."
"; echo" Telefon: ". $ değer."
"; Eko" --------
";) / ** * CSV'ye yeni bilgi yazma * / $ dizi = dizi (" Antonov BA; Yönetici OX2.ru; 89031233333 "," Kolobkov VB; Patron OX2.ru; 89162233333 "); $ csv-> setCSV ( $ arr);) catch (Exception $ e) (// csv dosyası yoksa, "Error:" mesajını görüntüleyin. $ e-> getMessage ();)?>
CSV dosyalarıyla yapılan ana çalışma sınıf tarafından üstlenilir CSV Aşağıdaki yöntemlere sahiptir:
setCSV (Dizi $ csv)- verileri bir csv dosyasına yazar. Veriler bir dizide aktarılmalıdır. Yöntem bir csv dosyası ekleyebilir ve yeni bir tane oluşturabilir (açıklamayı okuyun).
Yöntem GetCSV csv dosyasından veri okur ve aşağıdaki gibi iki boyutlu bir dizi döndürür:
Dizi (=> Dizi (=> Ivanov A.A. => OX2.ru şirketinin programcısı => 89255552332) => Dizi (=> Sidorov A.E. => OX2.ru şirketinin tasarımı => 89161231212) => Dizi ( => Pirozhkov AB => OX2.ru Sanat Yönetmeni => 84951232121) => Dizi (=> Kulibin BA => OX2.ru Müdürü => 89031233333))
Çok fazla kod ortaya çıkmasına rağmen, örnek oldukça basittir.
csv dosyalarından veri içe aktarma sadece çevrimiçi mağazalardaki ürünleri güncellemek için değil, aynı zamanda normal bir web sitesinde herhangi bir bilgiyi yüklemek / güncellemek için de faydalı olacaktır.
Örneğin, biz siteyi geliştirdi yönetim şirketi ve sıcak ve soğuk su sayaçları ile ilgili bilgileri aylık olarak yayınlamaları gerekiyordu. Tüm verileri excel dosyalarında saklanır. Ve burada csv formatı mükemmeldi!
Aynı zamanda, bir site oluşturmanın maliyeti değişmeyecek ve sitenin işlevselliği ve otomasyonu, rakiplerinden daha yüksek bir seviye olacaktır.
CSV verilerini içe aktarma, sıralama ve dışa aktarma ile ilgili PHP ayrıştırıcılarının geliştirilmesinden birkaç pratik görevi daha analiz edelim. Genellikle ayrıştırma sonuçlarının bir CSV dosyası biçiminde sunulması gerekir, ardından böyle bir dosya sitenin veritabanına aktarılabilir. CSV veri aktarıcıları genellikle çeşitli CMS'nin standart araçları tarafından desteklenir.
CSV (Virgülle Ayrılmış Değerler) Tablo verilerini temsil etmek için tasarlanmış bir metin biçimidir. Ad, verilerin virgülle ayrıldığını belirtir, ancak noktalı virgül (DSV biçimi) gibi diğer ayırıcılar kullanılabilir.
CSV dosyaları, EXCEL programının yanı sıra çeşitli metin düzenleyicilerle açılabilir. Ancak kodlama ile ilgili sorunlar var. Örneğin, EXCEL, BOM olmadan UTF-8'i sindirmede iyi değildir. EXCEL altında, verileri UTF-8'e kaydetmeniz yeterlidir.
Test probleminde, bir dizi CSV dosyasını e-posta sütununa göre sıralamamız gerekiyor. Dosyalar, çeşitli iletişim bilgilerine sahip kuruluşların listelerini içerir ve tüm firmaların e-postası yoktur. Bu nedenle listelerle çalışmayı kolaylaştırmak için listeleri bir komut dosyası ile sıralamak ve iyi bilinen posta kutularına sahip şirketleri en üste koymak uygundur.
Senaryo index.php ve giriş verilerinin bulunduğu dizin klasöre yerleştirilmelidir. csv-sıralayıcı.
İşlenen dosyalar dizine yazılacak çıktı.
PHP'de CSV verilerini içe ve dışa aktarma
index.php dosyasının listelenmesi
CSV dosyalarını sıralama
sayım ($ satır)) ($ fark = sayım ($ başlık) - sayım ($ satır); for ($ i = 1; $ i<= $difference; $i++) { $row = ""; } } } if($row != "sep=") { $data = $row; } } fclose($handle); } return $data; } /** * Функция сортировки массива по 1-му полю или N полей * * @param string|array $keys, string $order * * @return int */ function sort_arr_ncol($keys, $order = "ASC") { $order = ($order == "DESC") ? -1: 1; if(is_array($keys)) { //если сортировка по нескольким полям return function($a, $b) use ($keys, $order) { foreach($keys as $k) { if($a[$k] != $b[$k]) { return $order * (($a[$k] < $b[$k]) ? 1: -1); } } return 0; }; } else { //если сортировка по одному полю return function($a, $b) use ($keys, $order) { if ($a[$keys] == $b[$keys]) { return 0; } return $order * (($a[$keys] < $b[$keys]) ? 1: -1); }; } } /** * Функция преобразования массива в строку в CSV формате * * @param @param string $input, int $file_size, string $delimiter, string $enclosure * * @return string */ function str_putcsv($input, $file_size, $delimiter = ";", $enclosure = """) { // Open a memory "file" for read/write... $fp = fopen("php://temp", "r+"); // ... write the $input array to the "file" using fputcsv()... fputcsv($fp, $input, $delimiter, $enclosure); // ... rewind the "file" so we can read what we just wrote... rewind($fp); // ... read the entire line into a variable... $data = stream_get_contents($fp); // ... close the "file"... fclose($fp); // ... and return the $data to the caller, with the trailing newline from fgets() removed. return $data; //rtrim($data, "\r"); } // Параметры сортировщика $data_dir_name = "input"; // Каталог с исходными файлами $res_dir_name = "output"; // Каталог с отсортированными файлами $key_list_str = "email"; // Название столбца для сортировки (с нуля) if(!empty($_REQUEST["action"]) && $_REQUEST["action"] = "run") { if(!isset($_REQUEST["charset"])) { $charset = "no"; } else { $charset = $_REQUEST["charset"]; } $k = 0; $er = 0; $error_file_names = array(); $all_file_count = 0; $entries = scandir($data_dir_name); foreach($entries as $entry) { if(mb_strpos($entry, ".csv") !== false) { // Обрабатываем только CSV файлы $filepath_in = $data_dir_name . "/" . $entry; $file_size = filesize($filepath_in); $csv_data_arr = csv2array($filepath_in, $file_size); $header_arr = array_shift($csv_data_arr); $key_list = array_keys($header_arr, $key_list_str); usort($csv_data_arr, sort_arr_ncol($key_list, "ASC")); $csv_data_arr = array_merge($header_arr, $csv_data_arr); // Формируем строку для CSV файла $res_csv_file = ""; foreach($csv_data_arr as $key_row =>$ csv_data_arr_row) ($ res_csv_file. = str_putcsv ($ csv_data_arr_row, $ file_size);) if ($ karakter kümesi == "evet") ($ res_csv_file = iconv ("WINDOWS-1251", "UTF-8", $ res_cs if () $ res_csv_file == false) ($ res_csv_file = iconv ("WINDOWS-1251", "UTF-8 // IGNORE", $ res_csv_file); $ error_file_names = $ giriş;)) $ filepath_out = $ res_dir_name. "/". $ girişi; file_put_contents ($ filepath_out, $ res_csv_file)? $ k ++: $ er ++; $ all_file_count ++; )) Eko "". içe doğru ("
", $ error_file_names)."
Taramalı Atomik Kuvvet Mikroskobu Laboratuvar raporu şunları içermelidir:
Havai iletişim ağı için destek seçimi
AC katener tasarımı ve hesaplanması
Mikroişlemci sistemlerinin geliştirilmesi Mikroişlemci sistemlerinin tasarım aşamaları
mcs51 ailesinin mikrodenetleyicileri