PDA

View Full Version : import فایل CSV



H:Shojaei
چهارشنبه 25 تیر 1393, 13:31 عصر
سلام دوستان من میخوام فایل CSV که از یه فایل اکسل ساختم رو ایمپورت کنم به دیتابیس فایل رو که با فرمت CSV ذخیره میکنم کلمات فارسی علامت سوال میشن و همینا تو دیتابیس علامت سوال درج میشن کسی نمیدونه چطور میشه UTF8 ذخیره کرد فایلو یا کار دیگه ای اگه میشه کرد؟؟
ممنون

MMSHFE
چهارشنبه 25 تیر 1393, 13:36 عصر
فایل CSV خودتون رو با کدگذاری Unicode ذخیره کنید.

H:Shojaei
چهارشنبه 25 تیر 1393, 13:45 عصر
ممنون ولی خوب خیلی دنبالش گشتم که با utf8 ذخیره کنم ولی نمیشه نمیدونم چرا یه جا گفته بود باید اول با فرمت utf8 txt ذخیره کنی بعد فایل txt رو باز با فرمت csv ذخیره کنی این کارو کردم درست شد ولی داده ها به هم میریخت و اون ',' که بیت کلمات بود حذف میشدو نمیشد کلمات رو تفکیک کرد...

MMSHFE
چهارشنبه 25 تیر 1393, 14:00 عصر
ببرینش توی ++Notepad و از منوی Encodings گزینه Convert to UTF-8 without BOM رو بزنید و ذخیره کنید.

H:Shojaei
چهارشنبه 25 تیر 1393, 14:12 عصر
کدومو منظورتونه؟؟ بازم نمیشه!! الان فایل اکسل و csv رو همینکاری که گفتید کردم نشد فایل txt هم که قبلا گفته بودم کلا فرمت کلمات رو به هم میریزه و اول کاراکتر جدا کننده رو حذف میکنه بازم تاثیر نداره...

Unique
چهارشنبه 25 تیر 1393, 14:54 عصر
زمانی که دارین فایل را ذخیره میکنین باید اول BOM را بدین و بعدش محتویات و بعدش فایل را ذخیره کنین. اینطوری توی notepad و نرم افزار های دیگه براحتی تشخیص میده که utf-8 هست اما excel تا ۲۰۰۳ که من کار میکردم باهاش فایل csv را که با utf-8 BOM بود اصلا تشخیص نمیداد. بعد از کلی بررسی متوجه شدم باید UTF16-LE ذخیره کنم تا توی excel درست فایل csv را نمایش بده.

توی این پست (http://www.geekfarsi.com/%D8%AE%D8%B1%D9%88%D8%AC%DB%8C-csv-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-excel-%D8%AF%D8%B1-php/59) وبلاگم توضیح دادم.

اما BOM مربوط به utf-8 را اینطوری باید ابتدای فایل بدین :


$utf8_bom = chr(239) . chr(187) . chr(191);
fwrite($handle,$utf8_bom);

H:Shojaei
چهارشنبه 25 تیر 1393, 15:13 عصر
ممنون ولی خوب من میخوام فایل رو به دیتابیس ایمپورت کنم این کاری که شما گفتید خود فایل اکسل رو کدینگشو عوض میکنه فکر کنم... من میخوام فایل CSV که از این فایل اکسل میسازم کدینگش بشه UTF8 که وقتی میخونمش مقادیر علامت سوال نباشن اگه نه فایل اکسل که به خودی خود حروف فارسی توش درست نشون داده میشه...
بازم شاید من اشتباه توضیحاتتونو فهمیدم...

Tarragon
چهارشنبه 25 تیر 1393, 16:23 عصر
سلام
این خوط مربوط به کد کنه که در پروژه خودم استفاده کردم و اول آپلود میشد بعدش اون رو می خوند.
امید وارم بدرد بخوره :

if(move_uploaded_file($_FILES["file"]["tmp_name"],$address.$_FILES["file"]["name"])){
#OK!
$row = 1;
$fc = iconv('windows-1256', 'utf-8', file_get_contents($address.$_FILES["file"]["name"]));
file_put_contents('img/csvtmp/import.tmp', $fc);
$handle = fopen('img/csvtmp/import.tmp', "r");
while ( ($data = fgetcsv ($handle, 1000, ",")) !== FALSE ) {
$num = count ($data);
$row++;
for ($c = 0; $c < $num; $c++){
$datac = explode(",",$data[$c]);
//your data
}
}
}

Unique
چهارشنبه 25 تیر 1393, 20:33 عصر
من اصلا در مورد xls یا xlsx صحبت نکردم ! منظورم همون csv بود ! excel هر encoding ی را درست تشخیص نمیده ! البته تا ۲۰۰۳ که من استفاده میکردم ! ولی libre office خودش اگه تشخیص نده میپرسه که با چه encoding ی باز کنه. شما فایل csv را میخواین به برنامه ای بدین که وارد سازی کنه ؟ یا میخواین بعدش خودتون همون csv را بخونید و وارد سازی کنید ؟ اگه خودتون میخواین بخونین اصلا مهم نیست فایل چی نشون میده ! چون php ی که نوشته همون را میخونه و نباید علامت سوال باشسه مگه اینکه شما دستکاری خاصی انجام مییدین. کد بگذارین تا دوستان بهتر راهنمایی کنند.

H:Shojaei
چهارشنبه 25 تیر 1393, 23:33 عصر
سلام
این خوط مربوط به کد کنه که در پروژه خودم استفاده کردم و اول آپلود میشد بعدش اون رو می خوند.
امید وارم بدرد بخوره :

if(move_uploaded_file($_FILES["file"]["tmp_name"],$address.$_FILES["file"]["name"])){
#OK!
$row = 1;
$fc = iconv('windows-1256', 'utf-8', file_get_contents($address.$_FILES["file"]["name"]));
file_put_contents('img/csvtmp/import.tmp', $fc);
$handle = fopen('img/csvtmp/import.tmp', "r");
while ( ($data = fgetcsv ($handle, 1000, ",")) !== FALSE ) {
$num = count ($data);
$row++;
for ($c = 0; $c < $num; $C++‎){
$datac = explode(",",$data[$c]);
//your data
}
}
}
ممنون ولی این هم کار نکرد کلمات فارسی رو علامت سوال میزنه...

H:Shojaei
چهارشنبه 25 تیر 1393, 23:38 عصر
من اصلا در مورد xls یا xlsx صحبت نکردم ! منظورم همون csv بود ! excel هر encoding ی را درست تشخیص نمیده ! البته تا ۲۰۰۳ که من استفاده میکردم ! ولی libre office خودش اگه تشخیص نده میپرسه که با چه encoding ی باز کنه. شما فایل csv را میخواین به برنامه ای بدین که وارد سازی کنه ؟ یا میخواین بعدش خودتون همون csv را بخونید و وارد سازی کنید ؟ اگه خودتون میخواین بخونین اصلا مهم نیست فایل چی نشون میده ! چون php ی که نوشته همون را میخونه و نباید علامت سوال باشسه مگه اینکه شما دستکاری خاصی انجام مییدین. کد بگذارین تا دوستان بهتر راهنمایی کنند.
پس من اشتباه فهمیدم...
الان من یه فایل xlnx دارم که میخوام نمایشش بدم تو صفحه بعد واسه خوندنش باید به فرمت CSV تبدیلش کنم فایل اصلی با داده های فارسی هیچ مشکلی نداره ولی وقتی به CSV تبدیل میشه داده های فارسی علامت سوال میشن... تو تنظیمات هم من جایی پیدا نکردم که بشه کدینگ فایل cvs رو تغییر داد...
اینم کدش:


<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html" />
<meta name="author" content="" />
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<meta charset="utf-8"/>
<title>Untitled 1</title></head>
<body>

<form enctype="multipart/form-data" method="post" role="form">
<div class="form-group">
<label for="exampleInputFile">File Upload</label>
<input type="file" name="file" id="file" size="150">
<p class="help-block">Only Excel/CSV File Import.</p>
</div>
<button type="submit" class="btn btn-default" name="Import" value="Import">Upload</button>
</form>

ادامه...:


if(isset($_POST["Import"])){
/*$host='localhost';
// Host Name. $db_user= 'root';
//User Name $db_password= ''; $db= 'my_test_db'; // Database Name. $conn=mysql_connect($host,$db_user,$db_password) or die (mysql_error());
mysql_select_db($db) or die (mysql_error());
mysql_query('SET NAMES \'utf8\'');
mysql_set_charset('utf8');*/
$filename=$_FILES["file"]["tmp_name"];
if($_FILES["file"]["size"] > 0) {
$file = fopen($filename, "r");
/*$fc = iconv('windows-1256', 'utf-8', file_get_contents($filename));
file_put_contents($filename, $fc);
$file = fopen($filename, "r");*/
$count = 0;
//$sql_data = "SELECT * FROM prod_list_1 ";
while (($emapData = fgetcsv($file, 10000, "")) !== FALSE) {
$count++;
//print_r($emapData);
//exit();
echo $emapData[0];
$colomn=preg_split("*,*",$emapData[0]);
if($count>=1) {
/*$sql = "INSERT into tbl(a1,a2,a3) values ('$colomn[0]','$colomn[1]','$colomn[2]')";
mysql_query($sql);*/
echo ' column 1: '.$colomn[0].' And column 2: '.$colomn[1].' And column 3: '.$colomn[2].'<br>';
} } fclose($file);
echo 'CSV File has been successfully Imported';
} else echo 'Invalid File:Please Upload CSV File';}

از کدهای درج تو دیتابیس صرف نظر کنید...
راستی نمیشه خود فایل xlsx رو خوند داده هاشو (تیری تو تاریکی بود دیگه:لبخند:)؟؟

Unique
پنج شنبه 26 تیر 1393, 01:19 صبح
دوست عزیز ،‌سوال شما هیچ ربطی به php نداره :


الان من یه فایل xlnx دارم که میخوام نمایشش بدم تو صفحه بعد واسه خوندنش باید به فرمت CSV تبدیلش کنم فایل اصلی با داده های فارسی هیچ مشکلی نداره ولی وقتی به CSV تبدیل میشه داده های فارسی علامت سوال میشن.

شما تبدیل xlsx به csv را با excel انجام میدین ؟ خوب مشکل در تبدیل شماست ،‌ من excel ندارم چک کنم ولی در گذشته چنین مشکلی نداشتم. ممکنه excel داره فایل را با encoding غیر از utf-8 میده. اول مطمئن بشین encoding چیه بعدش میشه تبدیل کرد و با php باقی کار را انجام داد.

MMSHFE
پنج شنبه 26 تیر 1393, 10:18 صبح
راستی نمیشه خود فایل xlsx رو خوند داده هاشو (تیری تو تاریکی بود دیگه:لبخند:)؟؟

چرا میشه. درمورد کلاس PHPExcel تحقیق کنید.