گیک فارسی

نوشته های یک گیک فارسی از فعالیت ها ،‌ علاقه مندی ها و نقد هایش

وارد سازی اطلاعات از پایگاه های دیگر (MSSQL , Excel – XLS- XLSX , …) به MySQL

نویسنده:
29 می 14

قطعا یکی از مشکلاتی که برنامه نویسان زیاد با اون روبرو می‌شوند انتقال اطلاعات از یک پایگاه اطلاعاتی به پایگاه دیگر مخصوصاً با نوع متفاوت است. مثلاً اطلاعات را از MSSQL به MySQL انتقال دهیم. یا از یک فایل Microsoft Access یا حالا هر پایگاه اطلاعاتی فایلی یا Relational. معمولاً این کار را با ابزار های رایگان مانند MySQL Workbench یا پولی مانند Navicat انجام میدهند.

اما گاهی پیش میاد که امکان انتقال مستقیم وجود نداره. در این حالت بهترین راه خروجی گرفتن اطلاعات در یک مرحله به CSV و یا در دو مرحله به Xls یا Xlsx یا Ods و سپس به CSV.

زمانی که فایل CSV نهایی را داشته باشیم با خود دستورات SQL ، واردسازی به راحتی انجام پذیره. کافیه با دستور زیر به MySQL Server وصل بشیم :

mysql -u [username] --password=[password] --database=[database] –local-infile=TRUE

بعدش با دستور زیر محتویات فایل را داخل جدول مورد نظر میریزیم :

LOAD DATA LOCAL INFILE '/home/geekfarsi/file.csv' INTO TABLE [tablename] FIELDS TERMINATED BY ';' ENCLOSED BY '"' LINES TERMINATED BY '\n' (field1, field2);

نکته : در ویندوز آدرس دهی اینطوری انجام میشه :

c:\\path\\to\\csvfile.csv

نکته : در ویندوز به جای n\ ازr\n\ استفاده میکنیم.

نکته : در صورتی که محتویات داخل فایل CSV فرمت utf-8 دارند قبل از دستور واردسازی از دستورات زیر استفاده کنید :

SET NAMES 'utf8'
SET character_set_connection = 'utf8'

خواندن فایل‌های پایگاه داده dbf از طریق PHP

نویسنده:
5 می 14

این آموزش را پیرو درخواست یکی از همکاران و نیاز احتمالی دیگران روی وبلاگ میگذارم که نیاز داشت فایل‌های dbf را از طریق php بخونه و جالبه که با وجود بهره‌مندی از Linux VPS و اینکه میتونسته از طریق php-dbase کارش را انجام بده ولی به دو تا مشکل خورده. اول اینکه با سیستم عامل لینوکس آشنایی نداشته و نمیتونسته بسته های مورد نیاز را نصب کنه (از جمله دلایلی که نوشته «چرا یک برنامه نویس وب باید به مهاجرت به لینوکس فکر کنه» را نوشتم) و دوم اینکه مسئول هاست هم به هر دلیلی که داشته از نصب بسته ها با ذکر دلایل امنیتی پوچ ، طفره رفته.

قبل از کدنویسی هم برای دوستانی که آشنایی با dbf ندارند باید بگم که dbf یک نوع پایگاه داده بر پایه فایل هستش (مثل Microsoft Access) که برنامه نویسای FoxPro تحت داس و حالا Visual FoxPro ازش استفاده میکنند. توی ایران هم به خاطر نوشته شدن برنامه‌های شرکت های بیمه و دیگر نهاد‌ها با FoxPro ، خیلی‌ از برنامه نویسان که در حال ارتقاء نر م افزار های قدیمی هستند بهش بر میخورند.

یک نکته دیگه هم اینکه استفاده از php برای خوندن فایل‌های dbf فقط زمانی کاربرد داره که نیاز باشه فایل‌ها به سرور منتقل و سپس عملیاتی مثل پردازش و انتقال به MySQL و یا کلاً نمایش اطلاعاتش مطرح باشه و اگه قصد دارین فقط تبدیل کنین ، کافیه درایور های ODBC که مایکروسافت تولید کرده را نصب کنین و با یک نرم‌افزار که قابلیت Migeration داره و توی وب هم زیاده مثل MySQL Workbench اطلاعات را به جداول MySQL منتقل کنین.

برای خوندن فایل‌های dbf از این کلاس استفاده میکنیم (کلاس را من ننوشتم و اعتبارش برای سازندگان که اسامیشون توی خود فایل هست محفوظه) و با یک کد شبیه به این میتونید کل جدول را نمایش بدید.

require('./dbf_class.php');
    $dbf = new dbf_class('path_to_dbf_file');
    echo('<table border=1 cellspacing=0>');
    echo('<tr>');
    echo('<td>No.&nbsp;</td>');	
    for($j=0; $j<$dbf->dbf_num_field; $j++){
	    echo '<td>'.$dbf->dbf_names[$j]['name'].'</td>';
    }
    echo '</tr>';
    for($i=0; $i<$dbf->dbf_num_rec; $i++){
        if ($row = $dbf->getRow($i)) {
	        echo('<tr>');
        	echo('<td align="right">'.$i.'</td>');
	        for($j=0; $j<$dbf->dbf_num_field; $j++){
				echo '<td>'.htmlentities($row[$j]).'</td>';
    	    }
        	echo '</tr>';
        }
    }
    echo('</table>');

یک نکته که مجال توضیح توی این نوشته نیست و در آینده حتماً در موردش خواهم نوشت اینه که متون فارسی توی این جداول معمولاً یونیکد یا Windows-1256 نیست و از IranSystem استفاده شده. نحوه تبدیل از IranSystem به یونیکد را به زودی توی وبلاگ خواهم گذاشت.