منزل
Top.Mail.Ru Yandeks.Metrika
المنتدى: "القواعد";
الأرشيف الحالي: 2002.04.01;
تنزيل: [xml.tar.bz2];

إلى

السادة ، ساعد في قراءة البيانات من Excel البحث عن فروع مماثلة


Санька   (2002-03-05 13:28) [0]

المشكلة هي كما يلي:
يعطي العميل ملف Excel ، وأنا نقل جميع البيانات إلى المحلية
DB لمزيد من المعالجة. من العار أن هذا الملف غير مؤلف جيدًا في الخلايا (بدلاً من النقل تلقائيًا)
الكثير من المسافات كلمات م / ص ومدخلات مضغوطة .... عند نسخ عمود في جدول ، كل هذه الأحرف الزائدة تبدو قبيحة وغير مصححة للغاية. إذا كان يساعد - هنا هو الرمز. ربما شخص ما سوف اقول.
الإجراء TForm1.BitBtn1Click (المرسل: TObject) ؛
var i، k: integer؛
n: string
AppExcel ، القيمة: البديل ؛
بدأ
i: = 6؛ // من السطر السادس في كتاب إكسيل
AppExcel: = CreateOleObject ("Excel.Application") ؛
AppExcel.Workbooks.Open ("c: \ 111.xls"، False)؛
AppExcel.Visible: = صواب ؛
بينما أنا <= 34 تفعل
بدأ
n: = AppExcel.Cells.item [i، 4] .Value؛
taSS.edit.
taSS.insert.
taSs.fieldbyname ("Name"). AsString: = n؛

taSS.post.
taSS.Next.
i: = i + 1؛
الغاية؛
الغاية؛

أو أخبرني ما هي أفضل طريقة لتنظيم كل هذا ...
إذا كان ذلك ممكنًا ، لا ترسل إلى المواقع التي كان D-Excel فيها بالفعل ...
حسنا ، أنا سئمت منه ، كما أعتقد. شكرا مقدما !!!



MetallAdm   (2002-03-05 16:38) [1]

هل من الممكن إزالة المساحات الإضافية ، إلخ؟

n: = AppExcel.Cells.item [i، 4] .AsString؛ --- Sdesya ، أيضا ، كيف يمكنك أن تفعل سلسلة إذا كانت سلسلة
taSS.edit.
taSS.insert.
DelSpaces (N) ؛ --- من هذا القبيل :))

taSs.fieldbyname ("Name"). AsString: = n؛


الإجراء DelSpaces (فار xx: سلسلة) ؛
فار
لتر ، أنا: عدد صحيح ؛
ll، l: Integer؛
s: string؛
ب ، أ: بايت ؛
بدأ
s: = xx؛
ll: = 1؛
Lt: = الطول (S) ؛
l: = 0 ؛
a: = 0 ؛
بالنسبة إلى i: = 1 to lt do
بدأ
إذا كانت String (s [i]) = "" Then inc (l)؛
إذا String (s [i]) = "*" ثم a: = 1؛
الغاية؛
إذا لتر = ثم
بدأ
s: = "*" ؛
a: = 1 ؛
ll: = 1؛
الغاية؛
إذا = 0 ثم
بدأ
b: = 0 ؛
بالنسبة إلى i: = lt down to 2 do
بدأ
إذا السلسلة (s [i]) <> "" بعد ذلك
إذا ب = 0 ثم
بدأ
ll: = i ؛
b: = 1 ؛
الغاية؛
الغاية؛
إذا ll> 2 ثم Setlength (s، ll) else s: = "*"؛
الغاية؛
xx: = s؛
الغاية؛

نعم على الأقل entoy الداخلي
مرة واحدة ، كما كتب جيدًا لا أعرف مدى صحتها
كان طويل

نعم ، لم أبدأ بتصحيحها ، فهي تضع علامات على الخطوط الفارغة بعلامة النجمة من أجل الوضوح :)

أعتقد أنك سوف تزيل :)



Санька   (2002-03-05 17:29) [2]

شكرا جزيلا لك - سأحاول. إذا كان هذا يناشدك مرة أخرى
(حول النجيمات :)).
أما بالنسبة لتبسيط المهمة ، من حيث المبدأ ، لا ينشأ أحد
الأفكار. أن يكون شخص ما قد واجه مشكلة ...
بالمناسبة ، في حالتي ، مع هذا الإجراء ، "يفكر" الكمبيوتر لفترة طويلة جدًا (حتى يتم تعداد جميع الخلايا ، حتى يتم إدراجها في الخطوط الموجودة في الجدول)
سيكون من المثير للاهتمام للغاية معرفة رأيك ، والمتخصصين.



MetallAdm   (2002-03-05 17:47) [3]

بالمناسبة يزيل الإجراء enta
فقط من النهاية مساحات إضافية

لكنني أعتقد أنه ليس من الصعب فعل شيء من هذا القبيل
الذي يجد كلمات واحدة في سلسلة
ثم ادفعهم في صف واحد عبر مساحة المون في سطر واحد




Санька   (2002-03-06 09:05) [4]

داس ....
لا أعتقد أنه يمكنني القيام بذلك بسرعة: شيء مثل pascal
نظيفة (من حيث معالجة السلسلة) لم يكن لديك الكثير للتعامل معها. أنا أكثر وأكثر من DB. حسنا ، لانا - سأحاول .. سانكس.
وغيرها من الأفكار لا تملك chtoli .... الاتحاد الافريقي!



gek   (2002-03-06 09:40) [5]

يبدو لي إذا كان العميل سيوفر ملفًا بتنسيق csv ، إذن
سيكون من الأسهل نزع المساحات ، إلخ.



MetallAdm   (2002-03-06 09:51) [6]

تبدو وكأنها فعلت مرة واحدة على توربو صرير :))

يو تحميل الملف النصي والمجد يشق في الصفيف
بمعنى اختيار الكلمات الفردية من صفيف
حسنًا ، إذا لم يكن الأمر واضحًا ، أسأل نفسي

LoadFile الإجراء (Var txt: POuts؛ Fl: String)؛
فار
i، j، k: Word؛
s: كلمة
buff: صفيف [1..lhtWord] من Byte؛
bRead ، bWrite: Word؛
كورونا ، NumL: كلمة ؛
سلاسل: سلسلة.
بدأ
تعيين (FLS ، FL) ؛
إعادة تعيين (Fls ، 1) ؛
الحجم: = حجم الملف (Fls) ؛
إذا كان الحجم <65000 ثم
بدأ
BlockRead (Fls، lBuff ^، Size، bRead)؛
i: = 1؛
بينما (i ​​<= Size) و (lBuff ^ [i] = "") أو (lBuff ^ [i] = # 13) أو (lBuff ^ [i] = # 10)
بدأ
Inc (i)؛
الغاية؛
AddW: = 1؛
k: = 0 ؛
ل s: = أنا لحجم القيام به
بدأ
j: = 0 ؛
إذا كان (lbuff ^ [s] <> "") و (lBuff ^ [s] <> # 13) و (lBuff ^ [s] <> # 10) و (lBuff ^ [s] <> ".") و (lBuff ^ [s] <> "،") بعد ذلك
بدأ
{اكتب (lbuff ^ [s]) ؛}
Inc (ك) ؛
Strs [k]: = lbuff ^ [s]؛
سلاسل [0]: = Chr (k) ؛
txt ^ [addW]: = Strs؛
النهاية
آخر
بدأ
j: = s ؛
k: = 0 ؛
إذا كان (lBuff ^ [j] = ".") أو (lBuff ^ [j] = "،") بعد ذلك
بدأ
{Strs [k]: = lbuff ^ [s]؛
سلاسل [0]: = Chr (k)؛}
إذا كان (lBuff ^ [j + 1] <> "") أو (lBuff ^ [j + 1] <> # 13) أو (lBuff ^ [j + 1] <> # 10)
بدأ
Inc (AddW) ؛
s: = j ؛
الغاية؛
النهاية
آخر
بدأ
بينما (lBuff ^ [j] = "") أو (lBuff ^ [j] = # 13) أو (lBuff ^ [j] = # 10)
بدأ
Inc (j) ؛
{If (lBuff ^ [j] = # 13) أو (lBuff ^ [j] = # 10) ثم اكتب ("|") آخر اكتب ("+") ؛}
الغاية؛
Inc (AddW) ؛
s: = j-1 ؛
الغاية؛
الغاية؛
الغاية؛
الغاية؛
الغاية؛


هيه طويل الإجراء :))



Shirson   (2002-03-06 12:50) [7]

هم ...
لدى XL وظيفتان من هذه الوظائف:
1. تنظيف (نص) يزيل جميع الأحرف غير القابلة للطباعة من النص (يشير السطر إلى تغذية).
2. Trim (نص) يزيل كل المسافات من النص ، باستثناء المسافات الفردية ، بين الكلمات.

المجموع بواسطة = تقليم (نظيف (A1)) الإجراءات الطويلة يمكن تجنبها :)



Санька   (2002-03-06 14:10) [8]

> شيرسون
وضح ، يرجى القيام بهذه الوظائف مباشرة في Excel ، أو هل يسمون منى من دلفي؟



Shirson   (2002-03-06 14:35) [9]

> سانكا

يمكنك مباشرة في XL. يمكنك أيضا من دلفي - للحصول على XL أي خلية مع الصيغة = تقليم (نظيف (A1))، استبدل فقط جميع الخلايا التي تحتاج إلى معالجة بدلاً من A1 ، ومن هذا قراءة البيانات في دلفي ورميها في قاعدة البيانات ... إيه .. ليس من الواضح لماذا هناك حاجة إلى المرحلة مع دلفي هنا :) يمكنك رمي البيانات في قاعدة البيانات مباشرة من XL :) ))



Санька   (2002-03-06 14:45) [10]

> شيرسون
سأحاول ، شكرا لك ...
بالنسبة إلى النقل المباشر إلى قاعدة البيانات: إنه بسبب الحاجة إلى القيام بذلك باستخدام أدوات Excel - ولا أعتقد أن juvers الخاصة بي ... ثم ، إذا تكررت البيانات ، فسيكون من الصعب علي تتبع ذلك. وهكذا - قمت بنسخ إلى قاعدة البيانات الوسيطة ، ثم أفعل ذلك باستخدام أدوات SQL وحدد ما أريده من أجل البرنامج الرئيسي ... بشكل عام ، المشروع غبي جدًا :) البرنامج الرئيسي يعمل لفترة طويلة وقد تم تصحيح كل شيء ، لكن من الملل أبدأ في الخروج والتوصل إلى تبسيطات جديدة للمستخدمين.
حسنًا ، سأستمر في المعاناة أكثر. شكرا لكم جميعا !!! مساعدة!
قريبا سأعود على الأرجح مرة أخرى. ؛)



Санька   (2002-03-06 15:13) [11]

> شيرسون
بالمناسبة ، جربت هذا:

n: = AppExcel.Cells.item [i، 4] .Value؛
تقليم (ن) ؛ - يعمل ، يزيل المساحات
نظيفة (ن) ؛ - وهذا مدافع غير معروف لدلفي

ربما شيء سيحل محل هذه الميزة. في مساعدة على العمل مع خطوط بالتفتيش - لا شيء :(. ؟؟؟؟؟؟؟



TIP   (2002-03-06 15:31) [12]

وبالنسبة لدلفي فهناك مكتبة Qstrings ممتازة
علاوة على ذلك ، العمل مع سلاسل في المجمع.



Shirson   (2002-03-06 15:35) [13]

بشكل عام ، في Delphi (على الأقل في D6) ، تعمل وظيفة القطع على إزالة المسافات في بداية السطر ، في نهاية السطر ، وجميع أحرف التحكم من السطر نفسه. (كيف بحثت عن المساعدة؟ :))
حاول تقليم الخط فقط باستخدام القطع - ماذا يحدث؟



Shirson   (2002-03-06 15:40) [14]

> سانكا
"فيما يتعلق بالنقل المباشر إلى قاعدة البيانات: إنها مسألة القيام بذلك باستخدام أدوات Excel ، لكن جعفرتي لا يخمن ... ثم إذا تكررت البيانات ، فسيكون من الصعب علي تتبعها."

المالك هو سيد :) لن أكون مسيجة في الحديقة ، ولكن فعلت كل شيء في XL. وسيحتاج المستخدمون إلى الضغط على قواد واحد دون التفكير في آلية النظام. ثم هناك فحص تريد القيام به وتحريف واجهة المستخدم ، إلخ. ولكن إذا كنت تريد استخدام ملف دلفي ، فأنت بحاجة إلى :)



Санька   (2002-03-06 16:21) [15]

:))))))) نعم ، اعتقدت أنه منذ زمن طويل تركت الدمى ... :)
العمل باستخدام سلاسل ، على سبيل المثال ، والتقليم عبارة عن شريحة مجمعة ،٪)
أقصر من ٪٪ (((.
حسنًا ، s ، مع أسطر من الثقوب مع خطوط ... لا يمكنني العثور على أي شيء سوى الانضمام والبحث عن الأحرف وما إلى ذلك ، ولكن حول إزالة المسافات و "المدخلات" و "علامات التبويب" وقنفذ معهم - لا أرى سوى الديكورات.
إذا قلت للمبرمج المؤسف - شكرًا.
إذا لم يكن الأمر كذلك ، فسوف أذهب لتعلم اللغة الإنجليزية وشراء D لل dummers :))
و شكراً لكم جميعاً مرة أخرى ، شكراً لكم ، ذهبت إلى حالة سكر !!!




dmitryK   (2002-03-06 18:13) [16]


أما بالنسبة لتبسيط المهمة ، من حيث المبدأ ، لا أحد ينشأ
> الأفكار. أن يكون شخص ما قد واجه مشكلة ...
> بالمناسبة ، في حالتي ، مع هذا الإجراء ، الكمبيوتر "يفكر"
> وقت طويل جدًا (بينما يتكرر على جميع الخلايا ، حتى في الصفوف
> الجهاز اللوحي سوف يدخل)
> سيكون من المثير للاهتمام معرفة رأيك ، المتخصصين.


لا عجب انه يفكر طويلا. الرمز بطيء.
باختصار ، كيفية تحسين. هذا هو الكود المصدري:


> الإجراء TForm1.BitBtn1Click (المرسل: TObject) ؛
> var i، k: integer؛
> n: string؛
> AppExcel ، القيمة: البديل ؛
> ابدأ
> i: = 6؛ // من السطر السادس في كتاب إكسيل
> AppExcel: = CreateOleObject ("Excel.Application")؛
> AppExcel.Workbooks.Open ("c: \ 111.xls"، False)؛
> AppExcel.Visible: = True؛
> بينما أنا <= 34 أفعل
> ابدأ
> n: = AppExcel.Cells.item [i، 4] .Value؛
> taSS.edit ؛
> taSS.insert؛
> taSs.fieldbyname ("Name"). AsString: = n؛
>
> taSS.post؛
> taSS.Next؛
> i: = i + 1؛
> النهاية ؛
> النهاية ؛


AppExcel.Visible: = صواب ؛ - لماذا؟ ماذا ستعمل أبطأ؟
يشير هذا الجزء من التعليمات البرمجية إلى الحاجة إلى تصور عملية العمل باستخدام XL ، مما يؤدي إلى إبطاء العمل بشكل طبيعي.

n: = AppExcel.Cells.item [i، 4] .Value؛ - رمز من الكتاب المدرسي هو الصحيح تماما ، ولكن مثبط للغاية. لا أعرف بالضبط كيفية عمله (على مستوى نظام التشغيل) ، ولكن في الوقت المناسب لا يهم مطلقًا كمية البيانات التي تقوم بتنزيلها من صفحة الكتاب - خلية واحدة أو 1000. للقيام بذلك ، قم بإنشاء صفيف ديناميكي بالحجم المطلوب وحمل النطاق هناك.
وبعد ذلك فقط قم بتحليل هذه المجموعة ، والتي هي في حد ذاتها أسرع بكثير.

لكن هذه الشفرة ليست واضحة تمامًا بالنسبة لي
> taSS.edit ؛
> taSS.insert؛
> taSs.fieldbyname ("Name"). AsString: = n؛
>
> taSS.post؛
> taSS.Next؛

تحاول استبدال الخطوط الموجودة؟ على الرغم من أنه كان مثل الحديث عن إضافة جديدة؟ ولكن على أي حال ، غالبًا ما يكون إنشاء استعلام SQL بالكامل وتنفيذه أسرع. نظرًا للرمز ، من المتوقع أقل من صفوف 30 دفعة واحدة ، فمن الممكن إرسال مجموعة كاملة من التغييرات (استعلامات 30 SQL للتعديل / الإضافة) دفعة واحدة ، مما سيسرع من وقت تنفيذ المهمة.

والأخير
i: = i + 1؛ - من الأفضل استبدال هذه القطعة بشركة Inc (i) ؛

بالنسبة للنصائح المتعلقة بتحسين سرعة الوصول إلى البيانات في XL ، فإنني أوصي بشدة بالاطلاع على موقع Kingdom of Delphi على الويب والعثور على المقالات "On Waves of Integration". كل ما ذكرته باختصار هنا موصوف بتفصيل كبير هناك. اقرأها.

بالنسبة لإزالة المساحات الإضافية ، فإن هذه المشكلة لا تستحق اللعنة. لا أعرف ماذا عن D6 ، لكن قبل TRIM ، أقوم فقط بقطع المسافات البادئة والزائدة. إذا كان لا يزال زائد ، هذا يزيل أحرف التحكم المتوسطة ، فكل شيء بسيط عمومًا ، حسنًا ، إن لم يكن ، فستضطر إلى قضاء نصف ساعة لحذفها بنفسك.



dmitryK   (2002-03-06 18:16) [17]


> نصيحة (06.03.02 15: 31)
> ولكن بالنسبة لدلفي ، هناك مكتبة Qstrings ممتازة
> علاوة على ذلك ، العمل مع سلاسل في المجمع.


بالمناسبة ، نصيحة مفيدة للغاية ، أوصي بشدة باستخدامها.



MetallAdm   (2002-03-06 18:57) [18]

هيه نعم أعتقد أن سؤالك عن التحسين قد ارتفع بالفعل :)

> شيرسون بالمناسبة لم يعرف ولم يعرف :)
لا يزال لا يمكن أن الفطام من أوقات دوس لا أستطيع
عندما كان لا بد من القيام بأي برامج من الصفر :))



صفحات: 1 فرع كامل

المنتدى: "القواعد";
الأرشيف الحالي: 2002.04.01;
تنزيل: [xml.tar.bz2];

الطابق العلوي





الذاكرة: 0.63 ميغابايت
الوقت: 0.029 ج
1-165
CT
2002-03-18 12:04
2002.04.01
فرز في اكسل


14-294
Fellomena
2002-02-13 15:53
2002.04.01
تذكرني في صلواتك - في المستقبل القريب كنت محكومًا على فورتران = (


3-45
moor_38
2002-03-04 13:00
2002.04.01
DBGrin


1-200
ايرين
2002-03-18 11:25
2002.04.01
كيف تقرأ الشخصيات في المذكرة بعد


1-124
المبتدئ
2002-03-21 18:48
2002.04.01
تشغيل التطبيق من برنامجي.





الأفريكانية الألبانية عربي الأرميني أذربيجان الباسكي البيلاروسية Bulgarian التشيكية الصينية المبسطة) تقاليد صينية) الكرواتية التشيكية دانماركي Dutch English الإستونية الفلبينية Finnish جيب
الجاليكية الجورجية الألمانيّة اليونانيّة الكريولية الهايتية اللغة العبرية الهندية الهنغارية أيسلندي Indonesian الأيرلندية Italian اليابانيّة الكوريّة اللاتفية اللتوانية المقدونية الملايو المالطية Norwegian
اللغة الفارسية بولنديّة البرتغاليّة رومانية Russian صربي السلوفاكيّة سلوفيني إسباني السواحيلي Swedish Thai التركية الأوكراني الأردية الفيتنامية ويلزي اليديشية البنغالي البوسنية
السيبيونو الاسبرانتو الغوجاراتية الهوسا همونغ الإيبو جاوي الكانادا الخمير لاو لاتينية الماوري المهاراتية المنغولية النيبالية البنجابية الصومالية التاميل التيلجو اليوروبا
زولو
Английский Французский ألماني Итальянский البرتغالية Русский Испанский