PDA

View Full Version : گفتگو: لیست کردن داده های ورودی برنامه



behnamgholipoor
یک شنبه 02 آذر 1393, 12:43 عصر
سلام به همه دوستان
سوال اینه که :

اگه بخوام چیزی شبیه IDM بنویسم که اگه تعداد ورودی برنامه زیاد شد یا اگر داده ها بخواهند به صورت همزمان ذخیره بشن چطور باید داده های ورودی رو ابتدا لیست کرد و بعد به ترتیب در بانک برنامه ذخبره کرد ؟

mojtabamalaekeh
جمعه 07 آذر 1393, 21:16 عصر
یکم بیشتر توضیح بدین :)
متوجه این قسمت نمیشم:

اگه تعداد ورودی برنامه زیاد شد یا اگر داده ها بخواهند به صورت همزمان ذخیره بشن
داده های ورودی رو که میشه توی لیست، آرایه و ... گذاشت بعد به کمک linq هر بلایی میخوای سر لیست بیاری و آخرش هم لیست رو ذخیره کرد تو بانک.
ولی این داده ها چی هستن و قسمتی که نقل قول کردم رو بیشتر توضیح بدین.

behnamgholipoor
شنبه 08 آذر 1393, 02:00 صبح
دوست عزیز ممنون از توجه شما
داده های ورودی از مرورگر دریافت میشه و ممکنه که تو یک لحظه چندین ورودی همزمان داشته باشیم
چطور داده ها رو لیست کنم ؟
اگه ممکنه استفاده از آرایه یا لیست رو کمی توضیح بدین
روش بهتر از آرایه هم هست ؟

mojtabamalaekeh
شنبه 08 آذر 1393, 06:54 صبح
استفاده از آرایه رو من نمیتونم اونطور که یه معلم آموزش میده بگم چون جز مسائل الفبایی برنامه نویسیه
اما بهتون اطمینان میدم که راحت میتونید با جستجو توی نت، کارتون رو راه بندازید.
من بعد از چند سال که برگشتم سر برنامه نویسی دیدم سی شارپ چقدر امکانات داره: Array, List, Dictionary رو خیلی راحت تر از آرایه های معمولی میشه کنترلشون کرد.
از linq هم دستور select رو بلد باشین کافیه تا بتونید آرایه، لیست یا دیکشنری رو فیلتر کنید.

این یه کلاس فرضی که توی ربع ساعت نوشته شده و میتونه بهتون ایده بده که چطوری مورد به لیست اضافه کنید یا لیست رو فیلتر، ذخیره و بازیابی کنید:

class MyClass
{
public struct stDownload
{
public int id;
public DateTime dt;
public string url;
public bool Saved;
}

public List<stDownload> AllDownloads = new List<stDownload>(0);

private int MaxId = 0;

public void LoadFromDatabase()
{
SqlDataReader dr = new SqlDataReader();
//Write some code to get data from database
while (dr.Read())
{
int id = (int)dr["Id"];
AllDownloads.Add(new stDownload()
{
id = id,
url = dr["fURL"].ToString(),
dt = (DateTime)dr["fDate"],
Saved = true
});
if (id > MaxId) MaxId = id;
}
}

public void SaveToDatabase()
{
var unsavedDownloads = from dl in AllDownloads
where !dl.Saved
select dl;
foreach (stDownload dl in unsavedDownloads)
{
//Write your code here
}
}

public void AddDownload(string Url)
{
AllDownloads.Add(new stDownload()
{
id = ++MaxId,
dt = DateTime.Now,
url = Url,
Saved = false
});
}

public List<stDownload> SelectTodayImages(int Count)
{
var downloads = from dl in AllDownloads
where
dl.dt.Date >= DateTime.Now.Date &&
(dl.url.EndsWith(".jpeg") || dl.url.EndsWith(".jpg"))
orderby dl.dt descending
select dl;

List<stDownload> Top10 = downloads.Take(10).ToList<stDownload>();

return Top10;
}
}

توضیح در مورد فیلتر کردن لیست:
توی تابع SaveToDatabase فقط مواردی از لیست انتخاب شدن که هنوز Save نشدن تو بانک.
توی تابع SelectTodayImages هم مواردی که تاریخشون مال امروزه و آدرسشون به jpg و jpeg ختم میشه انتخاب شدن و تاریخشون از جدید به قدیمی مرتب شده (descending یعنی مرتب سازی نزولی)
بعد برای اینکه موارد زیاد نشن فقط 10تاشون برگردونده شده.
البته خواستم پارامتر Count رو بذارم جای عدد 10 ولی چون مطلب آموزشیه، عدد 10 گویاتره!

behnamgholipoor
شنبه 08 آذر 1393, 19:06 عصر
استفاده از آرایه رو من نمیتونم اونطور که یه معلم آموزش میده بگم چون جز مسائل الفبایی برنامه نویسیه
اما بهتون اطمینان میدم که راحت میتونید با جستجو توی نت، کارتون رو راه بندازید.


ممنون دوست عزیز ولی مشکل آموزش استفاده از آرایه نبود
سوالم رو یجور دیگه مطرح میکنم :
اگر کاربر دوتا مرورگرش باز باشه و از هر دو مرورگر ورودی دریافت بشه آیا بازم ورودی ها قابل لیست کردن هستند ؟
یا باید از روش دیگه ای استفاده کنم ؟

Mori Bone
شنبه 08 آذر 1393, 19:18 عصر
هیچ وقت نمیشه دقیق دو دانلود همزمان ایجاد کرد. حتما در صدم ثانیه یا ثانیه با هم تفاوت دارند. طبق این تفاوت می توانید از بزرگ به کوچک یا برعکش مرتب سازی و لیست کنید

mojtabamalaekeh
شنبه 08 آذر 1393, 20:24 عصر
ورودی ها همیشه قابل Add کردن به لیست هستند.
حتی اگر لینکهاشون یکی باشه و توی یک میلی ثانیه با هم اتفاق بیفتن.
فقط یه سؤال اساسی پیش میاد که: شما چجوری تشخیص میدین دانلودی توی یک مرورگر اتفاق افتاده؟
به این خاطر پرسیدم که نحوه ی تشخیص شما منجر به فراخوانی یه رویدادی میشه که توی اون رویداد باید مشخصات دانلود رو ذخیره کرد تو بانک.

behnamgholipoor
شنبه 08 آذر 1393, 22:52 عصر
فقط یه سؤال اساسی پیش میاد که: شما چجوری تشخیص میدین دانلودی توی یک مرورگر اتفاق افتاده؟
به این خاطر پرسیدم که نحوه ی تشخیص شما منجر به فراخوانی یه رویدادی میشه که توی اون رویداد باید مشخصات دانلود رو ذخیره کرد تو بانک.

یکی از مشکلات برنامه همینه که فعلا نتونستم به صورت کامل روی مدیریت لینک ها کار کنم یعنی فعلا هر لینک توی Page از هر مرورگری که باز باشه به برنامه ارسال میشه
(ولی دارم به نتیجه هایی میرسم)