PDA

View Full Version : تبدیل حروف و اعداد با کدپیج های فارسی تحت داس



rmb_ali
یک شنبه 24 تیر 1386, 09:08 صبح
وقتی میخوام کدپیج دیتابیس های foxpro رو به ویندوز تبدیل کنم اگر محتوای یه فیلد عدد باشه و یا فقط حروف باشه مشکلی پیش نمیاد(البته باید ترتیب از راست به چپ و یا از چپ به راست رو رعایت کنم) ولی وقتی میخوام یه فیلدی که ترکیبی از حروف و اعداد هست رو تبدیل کنم(مثل اره برقی 2 بوش ) به مشکل میخورم و ترتیب نوشته به هم میخوره و اینجوریی میشه ( 2 بوش اره برقی) اگر لطف کنید راهنمایی بفرمایید

ghabil
یک شنبه 24 تیر 1386, 23:22 عصر
دلیل اینکه این اتفاق میفته اینه که کانورتورت Base Direction نداره یعنی بعد از کلمه فارسی به عدد 2 اونو انگلیسی در نظر میگیره در نتیجه جهتش چپ به راست میشه پس عدد رو چپ کلمه قبلی مینویستش ، بعد میرسه به اولین حرف فارسی دوباره جهتش راست به چپ میشه در نتیجه کلمه بعدی رو در راست قرار میده .

راه حل درستت اینه که Convertorت همون BaseDirection رو داشته باشه و بجای اینکه جهت نوشته رو از روی محتوا تشخیص بده از روی اون تشخیص بده ، یعنی یکمی باید کدش رو دست بزنی .
یک راه حل هم دیدم استفاده میکنند ، هرچند زیاد درست نیست و مشکل هم ایجاد میکنه اینه که اعداد رو با حروف فارسی جایگزین میکنند مثلا 1 رو میکنند "یییی" بعد تبدیل رو انجام میدن بعد دوباره برش میگردونند به همون 1 همینطور برای سایر اعداد، ولی اینکار خالی از دردسر نیست.

rmb_ali
دوشنبه 25 تیر 1386, 11:41 صبح
میشه در مورد این base direction بیشتر توضیح بدی و راهنمایی بیشتری بفرماییید
در مورد راه حل دوم هم منظورت اینه که بعد از جایگزینی حروف فارسی به جای اعداد اگر اعداد رو بزاریم مشکلی پیش نمیاد

Saeid59_m
دوشنبه 25 تیر 1386, 14:15 عصر
می تونی با دستور list ‌توی فاکس پرو بانکت رو به Txt‌تبدیل کنی و بوسیله مبدل برنامه پارسا 99 اونو تبدیل به یک فایل متنی قابل نمایش در ویندوز در بیاری . بعد فایل متنی رو وارد دیتا بیس کنی

rmb_ali
دوشنبه 25 تیر 1386, 14:37 عصر
از این روش نمیخوام استفاده کنم چون روشی است که احتیاج به اون مبدل خاص داره در ضمن کاربر باید کار انجام بده

rmb_ali
سه شنبه 16 مرداد 1386, 21:16 عصر
آقا من مشکلم حل نشد و اون روش بالا رو هم تست کردم یعنی اعداد رو با کاراکترهایی مثل !@#$%^& و .... عوض کردم و در مرحله بعدی اونا رو جایگزین معادل خودشون کردم ولی بازم حل نشد و direction تغییر کرد البته اگر اعداد رو به همراه یک فاصله جایگزین کنم هیچ مشکلی پیش نمیاد و فقط اعدا با فاصله با هم قرار میگیرن اگر دوستان لطف کنن و فوت کوزه گری این قضیه رو به ما هم بگن ممنون و قول میدم یه برنامه کانورت دیتابیس فارسی داس به ویندوز و انتقالش به جداول تحت sql server رو اینجا بزارم

moradi_am
جمعه 19 مرداد 1386, 09:31 صبح
این فانکشن را نیز امتحان کنید :

function Tform1.fdos_fwin(Mstr : STRING):STRING;
VAR FD,tmp:STRING;
T,T1,ln:INTEGER;
SS:CHAR;
BEGIN
FD:=Trim(Mstr);
IF FD ='' THEN exit;
Mstr:='';
ln:=length(FD);
t:=0;
eng:=false;
while (t<=ln) do
begin
ss:=FD[t];
T1:=Ord(ss);
if (T1<138) and (T1<>32) then
begin
tmp:='';
while T1<138 do
begin
tmp:=tmp+fdw(T1);
t:=t+1;
ss:=FD[t];
T1:=Ord(ss);
end;
t:=t-1;
Mstr:=tmp+Mstr;
end
else
Mstr:=fdw(T1)+Mstr;
t:=t+1;
end;
result:=Mstr;
end;

function Tform1.fdw(T1:integer):string;
var tmpc,pr1,pr2:string;
begin
tmpc:='';
if eng then
pr1:='(' else pr1:=')';
case T1 of
1..31:tmpc:=CHR(T1);
32:tmpc:=CHR(T1)+' ';
33..39:tmpc:=CHR(T1);
40..41:tmpc:=pr1;
42..119:tmpc:=CHR(T1);
120: tmpc:='*';
121..127:tmpc:=CHR(T1);
128: tmpc:=CHR(48);
129: tmpc:=CHR(49);
130: tmpc:=CHR(50);
131: tmpc:=CHR(51);
132: tmpc:=CHR(52);
133: tmpc:=CHR(53);
134: tmpc:=CHR(54);
135: tmpc:=CHR(55);
136: tmpc:=CHR(56);
137: tmpc:=CHR(57);

138: tmpc:=CHR(161);
139: tmpc:=CHR(220);
140: tmpc:=CHR(191);
141: tmpc:=CHR(194);
142: tmpc:=CHR(198);
143: tmpc:=CHR(193);
144: tmpc:=CHR(199);
145: tmpc:=CHR(199);
146: tmpc:=CHR(200)+CHR(157);
147: tmpc:=CHR(200);
148: tmpc:=CHR(129)+CHR(157);
149: tmpc:=CHR(129);
150: tmpc:=CHR(202)+CHR(157);
151: tmpc:=CHR(202);
152: tmpc:=CHR(203)+CHR(157);
153: tmpc:=CHR(203);
154: tmpc:=CHR(204)+CHR(157);
155: tmpc:=CHR(204);
156: tmpc:=CHR(141)+CHR(157);
157: tmpc:=CHR(141);
158: tmpc:=CHR(205)+CHR(157);
159: tmpc:=CHR(205);
160: tmpc:=CHR(206)+CHR(157);
161: tmpc:=CHR(206);
162: tmpc:=CHR(207);
163: tmpc:=CHR(208);
164: tmpc:=CHR(209);
165: tmpc:=CHR(210);
166: tmpc:=CHR(142);
167: tmpc:=CHR(211)+CHR(157);
168: tmpc:=CHR(211);
169: tmpc:=CHR(212)+CHR(157);
170: tmpc:=CHR(212);
171: tmpc:=CHR(213)+CHR(157);
172: tmpc:=CHR(213);
173: tmpc:=CHR(214)+CHR(157);
174: tmpc:=CHR(214);
175: tmpc:=CHR(216)+CHR(157);
176..223 : tmpc:=CHR(35);
224: tmpc:=CHR(217)+CHR(157);
225: tmpc:=CHR(218)+CHR(157);
226: tmpc:=CHR(218)+CHR(157);
227: tmpc:=CHR(218);
228: tmpc:=CHR(218);
229: tmpc:=CHR(219)+CHR(157);
230: tmpc:=CHR(219)+CHR(157);
231: tmpc:=CHR(219);
232: tmpc:=CHR(219);
233: tmpc:=CHR(221)+CHR(157);
234: tmpc:=CHR(221);
235: tmpc:=CHR(222)+CHR(157);
236: tmpc:=CHR(222);
237: tmpc:=CHR(223)+CHR(157);
238: tmpc:=CHR(223);
239: tmpc:=CHR(144)+CHR(157);
240: tmpc:=CHR(144);
241: tmpc:=CHR(225)+CHR(157);
242: tmpc:=CHR(225)+CHR(199);
243: tmpc:=CHR(225);
244: tmpc:=CHR(227)+CHR(157);
245: tmpc:=CHR(227);
246: tmpc:=CHR(228)+CHR(157);
247: tmpc:=CHR(228);
248: tmpc:=CHR(230);
249: tmpc:=CHR(229)+CHR(157);
250: tmpc:=CHR(229);
251: tmpc:=CHR(229);
252: tmpc:=CHR(237)+CHR(157);
253: tmpc:=CHR(237)+CHR(157);
254: tmpc:=CHR(237);
255: tmpc:=CHR(255);
end;
if (t1<=41) and (t1>=40) then eng:=true;


result:=tmpc;
end;

rmb_ali
سه شنبه 23 مرداد 1386, 15:00 عصر
دوست عزیز ممنون من این کد شما رو تست میکنم و جوابشو میدم

سیروس مقصودی
چهارشنبه 24 مرداد 1386, 08:05 صبح
دوست عزیز Moradi_am

Function شما عالی بود ولی تنها اشکالی که دارد این است که وقتی داخل یک جمله حروف انگلیسی وجود داشته باشد جمله تبدیل شده تا قبل از حروف انگلیسی را صحیح تبدیل میکند ولی حروف بعد از آنرا به اول جمله انتقال میدهد .
با تشکر .

mojtaba_z
دوشنبه 29 مرداد 1386, 08:28 صبح
سلام
آقای سیروس مقصودی ، شما اصلاح شده کد بالا رو دارید ؟