النتائج 1 إلى 14 من 14
- 20-03-2020, 06:00 PM #1
ابو محمد(أسامة) -- كيف انزل سطر اكسل csv ؟؟
بسم الله الرحمن الرحيم
ارجو المساعدة في حل المشكلة اسفل لاهنت
يطبع التكات ملف اكسل باللملي سكند للزوج اللي طبقنا على تشارته,
وكل مرة لازم استخدم for loop ويثقل كلما زاد عدد التكات
هل يوجد حل بحيث مع كل تكة ينزل فقط سطر ويطبع بيانات التكة الجديدة؟ دون الحاجة لاعادة طباعة كل ماسبق مرة ثانية!
كود:struct prices { string time; string bid; string ask; }; prices arr[]; int count=-1; void OnTick() { count++; ArrayResize(arr,count+1); arr[count].time=TimeToString(GetTickCount()/1000,TIME_MINUTES|TIME_SECONDS)+"."+formatMilliSecond(MathMod(GetTickCount(),1000)); arr[count].bid=DoubleToString(SymbolInfoDouble(Symbol(),SYMBOL_BID),SymbolInfoInteger(Symbol(),SYMBOL_DIGITS)); arr[count].ask=DoubleToString(SymbolInfoDouble(Symbol(),SYMBOL_ASK),SymbolInfoInteger(Symbol(),SYMBOL_DIGITS)); int filehandle=FileOpen("myTicks.csv",FILE_WRITE|FILE_CSV,";"); Print(count+"-----"+GetTickCount()+" "+filehandle); if(filehandle!=INVALID_HANDLE) { for(int i=count-1;i>=0;i--) FileWrite(filehandle,i,arr[i].time,Symbol(), EnumToString(ENUM_TIMEFRAMES(_Period)),arr[i].bid,arr[i].ask); FileClose(filehandle); } } string formatMilliSecond(int t) { string str=t; if(t<10) str="00"+t; else if(t<100) str="0"+t; return str; }
ودمتم
- ملحوظة: ممكن متابعة التغير وملف الاكسل مفتوح من خلال محرر الميتا مثل الصورة الاخيرةآخر تعديل بواسطة سلمان_العتيبي ، 20-03-2020 الساعة 06:03 PM
- 21-03-2020, 02:19 AM #2جرب هذا الكودكود PHP:
[LEFT]void OnTick()
{
count++;
ArrayResize(arr,count+1);
arr[count].time=TimeToString(GetTickCount()/1000,TIME_MINUTES|TIME_SECONDS)+"."+formatMilliSecond(MathMod(GetTickCount(),1000));
arr[count].bid=DoubleToString(SymbolInfoDouble(Symbol(),SYMBOL_BID),SymbolInfoInteger(Symbol(),SYMBOL_DIGITS));
arr[count].ask=DoubleToString(SymbolInfoDouble(Symbol(),SYMBOL_ASK),SymbolInfoInteger(Symbol(),SYMBOL_DIGITS));
int filehandle=FileOpen("myTicks.csv",FILE_WRITE|FILE_CSV,";");
Print(count+"-----"+GetTickCount()+" "+filehandle);
if(filehandle!=INVALID_HANDLE)
{
FileSeek(filehandle,0,SEEK_END);
FileWrite(filehandle,0,arr[0].time,Symbol(), EnumToString(ENUM_TIMEFRAMES(_Period)),arr[0].bid,arr[0].ask);
FileClose(filehandle);
}
}
[/LEFT]
قمت باضافةFileSeek(filehandle,0,SEEK_END); مكان "for loop"
- 21-03-2020, 03:04 AM #3الكود اللذي سبق لا يعمل
انا اسف على هذا الغلط
هذا هو الكود الصحيحكود PHP:struct prices
{
string time;
string bid;
string ask;
};
prices arr[];
int count=-1;
void OnTick()
{
//---
int fileHandle ;
count++;
ArrayResize(arr,count+1);
arr[count].time=TimeToString(GetTickCount()/1000,TIME_MINUTES|TIME_SECONDS)+"."+formatMilliSecond(MathMod(GetTickCount(),1000));
arr[count].bid=DoubleToString(SymbolInfoDouble(Symbol(),SYMBOL_BID),SymbolInfoInteger(Symbol(),SYMBOL_DIGITS));
arr[count].ask=DoubleToString(SymbolInfoDouble(Symbol(),SYMBOL_ASK),SymbolInfoInteger(Symbol(),SYMBOL_DIGITS));
string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);
string filename = "myTicks.csv";
if(FileIsExist(filename,0))
{
fileHandle = FileOpen(filename , FILE_CSV|FILE_WRITE|FILE_READ, " , ");
FileSeek(fileHandle,0,SEEK_END);
FileWrite(fileHandle,0,arr[0].time,Symbol(), EnumToString(ENUM_TIMEFRAMES(_Period)),arr[0].bid,arr[0].ask);
FileClose(fileHandle);
Print(count+"-----"+GetTickCount()+" "+fileHandle);
}else
{
fileHandle = FileOpen(filename , FILE_CSV|FILE_WRITE|FILE_READ, " , ");
FileWrite(fileHandle,0,arr[0].time,Symbol(), EnumToString(ENUM_TIMEFRAMES(_Period)),arr[0].bid,arr[0].ask);
FileClose(fileHandle);
}
}
//+------------------------------------------------------------------+
string formatMilliSecond(int t)
{
string str=t;
if(t<10) str="00"+t;
else if(t<100) str="0"+t;
return str;
}
- 21-03-2020, 02:00 PM #4
في هذا الموضوع إحتمال تجد فيه ضالتك أخي سلمان
https://forum.arabictrader.com/t170877.html
- 21-03-2020, 02:36 PM #5
آخر تعديل بواسطة سلمان_العتيبي ، 21-03-2020 الساعة 02:39 PM
- 21-03-2020, 04:44 PM #6
- 21-03-2020, 05:12 PM #7
- 21-03-2020, 06:42 PM #8
صالح؟ منين جايبه؟؟ من الصين؟؟ بي كيرفل
elassari : لاحظت انك وضعت 0 كاندكس لكل تكة جديدة--افترض اردت التكة رقم 17 مثلا؟
قبل التجارب حسب ردك السر في دالة FileSeek ؟
بالتأكيد ستتم التجربة الان تستر--هذه فائدة أخرى منك اخي.
- 21-03-2020, 08:09 PM #9اهم دالتين
كود PHP:FileOpen(filename , FILE_CSV|FILE_WRITE|FILE_READ, ';');
//فتح و قراءة الملف
FileSeek(fileHandle,0,SEEK_END);
// انشاء سطر جديد
آخر تعديل بواسطة elassari ، 21-03-2020 الساعة 08:12 PM
- 22-03-2020, 05:24 PM #10
SEEK_END
SEEK_CUR
SEEK_SET
؟؟
انتظر افتتاح السوق لتجربة الثلاث,
ولكن اذا عندك شرح لها--فإننا بحاجته
مثلا لو شلت SEEK_END في الردود أعلاه ووضعت SEEK_SET --- ايش اللي يتغير على فرض انه ممكن-----واذا غير ممكن ليش؟
من قراءة في المانوال اليوم دالة FileSeek تأخذ 3 ثوابت, SEEK_SET-----SEEK_CUR----SEEK_ENDآخر تعديل بواسطة سلمان_العتيبي ، 22-03-2020 الساعة 05:27 PM
- 23-03-2020, 12:39 AM #11
ممتاز اخي-خفيف جدا وفوري
فقط لديك غير الاندكس من 0 الةى count لكي لايعيد كل مرة طباعة قيم اول تكة--اندكس0
FileWrite(fileHandle,count,arr[count].time,Symbol(), EnumToString(ENUM_TIMEFRAMES(_Period)),arr[count].bid,arr[count].ask);
- 23-03-2020, 12:40 AM #12
- 23-03-2020, 12:41 AM #13
- 23-03-2020, 10:20 PM #14