Çözüldü text'ten veri çekme ve kriterlere göre farklı sayfalara aktarma

Katılım
9 Eylül 2010
Mesajlar
860
Excel Vers. ve Dili
2016&2019&2021 TR
Altın Üyelik Bitiş Tarihi
29-09-2023
Değerli hocalarım öncelikle merhabalar. Yapmak istediğim programdan çıktı halinde gelen .log uzantılı text içerisindeki stop loss**** şeklinde gelen değerlerle eşleşen buy #**** ve sell #**** değerlerin ayrı ayrı buy ve sell sayfalarına aktarılmasını istiyorum.
Buy ve modify arası ve sell modify arasındaki tüm değerleriyle birlikte. şu an sadece birer örnek aktardım sayfalara ancak yaklaşık her seferinde 300 adet değer eşleşmekte oluyor.
Bu şekilde açıklayamadıysam eğer tek tek yaptığım tüm aşamaları yükleyebilirim.
Yardımlar için şimdiden teşekkürler.
 

Ekli dosyalar

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,642
Excel Vers. ve Dili
Pro Plus 2021
LogKlasor sayfasına log dosyalarınızın adresini yazın başka dosya bulunmasın.
Veri sekmesinden tümünü yenile yaptığınız zaman çalışması lazım.
 

Ekli dosyalar

Katılım
9 Eylül 2010
Mesajlar
860
Excel Vers. ve Dili
2016&2019&2021 TR
Altın Üyelik Bitiş Tarihi
29-09-2023
Sn. Hocam bu haliyle çalışıyor çok sağ olun. Stop loss #**** ile biten değerleri aktarabilir miyiz sadece buy ve sell sayfalarına. Bu şekilde tüm değerleri aktarıyor. Ayrıca buy ve sell sayfalarındaki A sütunları gerekli mi hocam iptal edebilir miyiz onları.
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,642
Excel Vers. ve Dili
Pro Plus 2021
Anlamadım ..
2 03:13:02.721 2004.05.04 15:47:10 Tester: take profit #169 at 0.72800 (0.72820 / 0.72850)
0 03:13:02.803 2004.05.04 15:56:28 Tester: stop loss #168 at 0.72933 (0.72910 / 0.72940)
2 03:13:02.834 2004.05.04 16:00:02 Candle System EA AUDUSD,H1: open #170 buy 0.01 AUDUSD at 0.72870 sl: 0.71870 ok

Log dosyasında ilk stop loss #168 var
open #170 --- modify #170 arası mı alınacak..
 
Katılım
9 Eylül 2010
Mesajlar
860
Excel Vers. ve Dili
2016&2019&2021 TR
Altın Üyelik Bitiş Tarihi
29-09-2023

Olumsuz hocam. Stop loss taki değer neyse onu arayıp buy ve sell sayfalarına aktaracak.


open #168 sell 0.01 AUDUSD at 0.71933 sl: 0.72933 ok
(e==22 && d==25 && a==20)||
(e1==13 && d1==11 && a1==22)||
(e==22 && d==25 && a1==22)||
(e1==13 && d1==11 && a==20)||
(e==22 && d1==11 && a==20)||
(e1==13 && d==25 && a1==22)||
(e==22 && d1==11 && a1==22)||
(e1==13 && d==25 && a==20)||
(e==22 && c==16 && a==20)||
(e1==13 && c1==19 && a1==22)||
(e==22 && c==16 && a1==22)||
(e1==13 && c1==19 && a==20)||
(e==22 && b1==12 && a1==22)||
(e1==13 && b==15 && a==20)||
(e==22 && c1==19 && a==20)||
(e1==13 && c==16 && a1==22)||
(e==22 && b1==12 && a==20)||
(e1==13 && b==15 && a1==22)||
(e==22 && b==15 && a1==22)||
(e1==13 && b1==12 && a==20)||
(e==22 && c1==19 && a1==22)||
(e1==13 && c==16 && a==20)||
(e==22 && b==15 && a==20)||
(e1==13 && b1==12 && a1==22)||
(d==25 && b1==12 && a1==22)||
(d1==11 && b==15 && a==20)||
(d==25 && b1==12 && a==20)||
(d1==11 && b==15 && a1==22)||
(d==25 && b==15 && a1==22)||
(d1==11 && b1==12 && a==20)||
(d==25 && b==15 && a==20)||
(d1==11 && b1==12 && a1==22)||
(d==25 && c1==19 && a1==22)||
(d1==11 && c==16 && a==20)||
(d==25 && c1==19 && a==20)||
(d1==11 && c==16 && a1==22)||
(d==25 && c==16 && a1==22)||
(d1==11 && c1==19 && a==20)||
(d==25 && c==16 && a==20)||
(d1==11 && c1==19 && a1==22)||
(d==25 && c1==19 && a1==22)||
(d1==11 && c==16 && a==20)||
(d==25 && c1==19 && a==20)||
(d1==11 && c==16 && a1==22)||
(d==25 && c==16 && a1==22)||
(d1==11 && c1==19 && a==20)||
(d==25 && c==16 && a==20)||
(d1==11 && c1==19 && a1==22)||
modify #168 sell 0.01 AUDUSD at 0.71933 sl: 0.72933 tp: 0.71733 ok


 

bu aradaki tüm değerleri sell sayfasına aktarmasını istiyorum. Stop loss # değerleri ile buy ve sell yerleri farklılık gösterebiliyor.

 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,642
Excel Vers. ve Dili
Pro Plus 2021
Yani
Stop loss geçen #ID lerin open--modify aralarını alacak.
Tek log dosyasından mı çoklu klasörden mi olacak.
 
Katılım
9 Eylül 2010
Mesajlar
860
Excel Vers. ve Dili
2016&2019&2021 TR
Altın Üyelik Bitiş Tarihi
29-09-2023
Çok teşekkürler hocam. Biraz inceledim bir kaç adımı anlayabildim. Eğer zahmet olmayacaksa adımları açıklayabilir misiniz bizlere.
 
Katılım
9 Eylül 2010
Mesajlar
860
Excel Vers. ve Dili
2016&2019&2021 TR
Altın Üyelik Bitiş Tarihi
29-09-2023
Hocam bir önceki dosya yolu daha kullanılışlıydı. Bu şekilde her seferinde dosya yolu belirtirken sürekli dosya adı yazmak gerekecek. Mümkünse değiştirebilir miyiz.
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,642
Excel Vers. ve Dili
Pro Plus 2021
Kod:
Sub Test()

    Dim fileName As String, arr As Variant, lossArr As Variant
    Dim i&, say&, say1&, say2&, bl As Variant, itms As Variant
    Dim dicBuy As Object, dicSell As Object, dicLoss As Object
    Dim buy As Boolean, openID As String

    fileName = "C:\Users\pc\Desktop\Power-Query-examples\log\20201201.log"

    Set dicLoss = CreateObject("Scripting.Dictionary")
    Set dicBuy = CreateObject("Scripting.Dictionary")
    Set dicSell = CreateObject("Scripting.Dictionary")

    arr = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(fileName, 1).ReadAll, vbNewLine)

    Cells.ClearContents
    lossArr = Filter(arr, "stop loss")

    If UBound(lossArr) = -1 Then GoTo cikis

    With CreateObject("Vbscript.Regexp")
        .Pattern = "#\d+"
        For i = LBound(lossArr) To UBound(lossArr)
            dicLoss(Trim(.Execute(lossArr(i))(0))) = i
        Next i

        For i = LBound(arr) To UBound(arr)
            If InStr(arr(i), "open #") Then
                openID = Trim(.Execute(arr(i))(0))
                If InStr(arr(i), "buy") Then buy = True Else buy = False
            End If

            If openID <> "" And dicLoss.exists(openID) Then
                If InStr(arr(i), "H1:") Then
                    bl = Trim(Split(arr(i), "H1:")(1))
                    If buy Then
                        say1 = say1 + 1
                        dicBuy(say1) = bl
                    Else
                        say2 = say2 + 1
                        dicSell(say2) = bl
                    End If
                End If
            End If
        Next i
    End With

    itms = Application.Transpose(dicBuy.items)
    If UBound(itms) Then Cells(1, 1).Resize(UBound(itms), 1).Value = itms

    itms = Application.Transpose(dicSell.items)
    If UBound(itms) Then Cells(1, 2).Resize(UBound(itms), 1).Value = itms

    Erase arr, itms, lossArr
    Set dicBuy = Nothing: Set dicSell = Nothing: Set dicLoss = Nothing


    Exit Sub
cikis:
    MsgBox "Hata"
End Sub
 
Katılım
9 Eylül 2010
Mesajlar
860
Excel Vers. ve Dili
2016&2019&2021 TR
Altın Üyelik Bitiş Tarihi
29-09-2023
Hocam çok teşekkürler. Çözüm harika ancak ben bu kodları nereye yazdığınızı bile bulamadım dosyada henüz :(
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,642
Excel Vers. ve Dili
Pro Plus 2021
Son attığım vba çözümüdür. Power Query ile alakası yok.
 
Katılım
9 Eylül 2010
Mesajlar
860
Excel Vers. ve Dili
2016&2019&2021 TR
Altın Üyelik Bitiş Tarihi
29-09-2023
Çok sağolun hocam. Her iki çözüm de işimi fazlasıyla görüyor.
 
Katılım
9 Eylül 2010
Mesajlar
860
Excel Vers. ve Dili
2016&2019&2021 TR
Altın Üyelik Bitiş Tarihi
29-09-2023
Sn. hocalarım yine aynı konuda yardımınıza ihtiyacım var. Bir önceki çözüme baktım ancak uyarlayamadım. Yine text dosyasından excele kritere göre veri alıp ayırmaya çalışıyorum.
0 01:48:42.637 2021.01.06 01:00:00 Mum Stratejiler EURUSD,H1: Strategy:1182212 Win/Loss:86.6667 PnL:15 BUY (x==18 && y==22 && z==12)||
0 01:48:42.876 2021.01.06 01:00:00 Mum Stratejiler EURUSD,H1: Strategy:2132512 Win/Loss:86.6667 PnL:15 SELL (x1==13 && y1==25 && z1==12)|| şeklinde satırlar var ben bu satırdaki kalın yazıyla olan kısımlarını buy ve sel sayfalarına aktarmak istiyorum. Buy (x== ile başlıyor sell ise (x1== ile başlıyor.
Şimdiden yardımlarınız için çok sağolun.
 

Ekli dosyalar

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,642
Excel Vers. ve Dili
Pro Plus 2021
Kod:
Sub Test()

    Dim fileName As String, arr As Variant, isleArr As Variant
    Dim sayfa, i%

    fileName = "C:\Users\pc\Desktop\20210204.log"

    arr = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(fileName, 1).ReadAll, vbNewLine)

    For Each sayfa In Array("BUY", "SELL")
        With Sheets(sayfa)
            .Cells.ClearContents
            isleArr = Filter(arr, sayfa)
            If UBound(isleArr) > 0 Then
                For i = 2 To UBound(isleArr)
                    .Cells(i, 2) = Trim(Split(isleArr(i - 2), sayfa)(1))
                Next i
            End If
        End With
    Next sayfa

End Sub
 
Son düzenleme:
Katılım
9 Eylül 2010
Mesajlar
860
Excel Vers. ve Dili
2016&2019&2021 TR
Altın Üyelik Bitiş Tarihi
29-09-2023
Hocam çok sağolun PC başında değilim. En kısa zamanda dönüş yapacağım.
 
Katılım
9 Eylül 2010
Mesajlar
860
Excel Vers. ve Dili
2016&2019&2021 TR
Altın Üyelik Bitiş Tarihi
29-09-2023
Hocam tekrardan çok teşekkürler. Müthiş çalışıyor. Dosya adını direk kodun içine yazmak yerine dosyayı biz seçebilir miyiz. Bir ikincisi 5 milyon ve üzeri satırlı verilerde sorun olmaz değil mi?
 
Son düzenleme:
Katılım
9 Eylül 2010
Mesajlar
860
Excel Vers. ve Dili
2016&2019&2021 TR
Altın Üyelik Bitiş Tarihi
29-09-2023
Hocam büyük dosyalarda out of memory hatası alıyorum.
 
Üst