Skip to main content

AccessTr.neT


Metni Sayı Ve Karakter Kısıtına Göre Parçalara Ayırma

Metni Sayı Ve Karakter Kısıtına Göre Parçalara Ayırma

Çözüldü #1
Merhabalar.
çalıştığım işyerinde açılan stok kartlarının farklı bir programa aktarımında 80 karakter kısıtı var. Bu bağlanda yeni açılan stok kartının tanımını 80 karaktere göre ve tanımlarda yer alan "/" ayraçlarına göre 3 farklı metin kutusuna parçalamam gerekiyor.
örneğin:
Malzeme Tanımım: "Ürün Modeli1/Model Ölçüsü/Model Opsiyonu1/Model Opsiyonu21/Model Opsiyonu3/Model Opsiyonu4/Model Opsiyonu5/Model Opsiyonu6/Model Opsiyonu7/Model Opsiyonu8/Model Opsiyonu9/Model Opsiyonu10"
Bu Tanımı
1. textbox için: "Ürün Modeli1/Model Ölçüsü/Model Opsiyonu1/Model Opsiyonu21/Model Opsiyonu3"
2. textbox için: "Model Opsiyonu4/Model Opsiyonu5/Model Opsiyonu6/Model Opsiyonu7/Model Opsiyonu8"
3. textbox için: "Model Opsiyonu9/Model Opsiyonu10"

olacak şekilde parçalamam gerekiyor. ilk kısmını parçalayabiliyorum ama diğer 2 kısmın parçalanmasında takılıp kaldım.
Örnek uygulamayı ek olarak ekledim.

Yardımcı olabilirseniz çok memnun olurum.
.rar metin parcalama.rar (Dosya Boyutu: 31,62 KB | İndirme Sayısı: 8)
Cevapla
#2
bölme yönteminizi tam olarak anlayamadım
1 -
textbox 1 için 5. "/" işaretine kadar
textbox 2 için 5.-10. "/" işaretleri arası
textbox 3 için 10. dan sonrası biçiminde mi olacak
2 - yoksa her textbox için ayrı ayrı bu 80 sınırı kontrol edilip "/" konumu buna göre mi tespit edilecek?
2. biçimde ise, diyelim ki 300 karakterlik veri geldi, 1., 2. ve 3.yü 80e göre böldük elimizde kalan fazlalık ne olacak?
Cevapla
#3
2. Seçenekte belirttiğiniz gibi olacak, yani her textbox için ayrı ayrı bu 80 sınırı kontrol edilip "/" konumuna göre alacağı kısmı belirleyecek. 300 karakterlik veri gelemez, benim veritabanımda toplam alan 240 karakter. ve şu ana kadar 240 karakterlik bir stok kalemi oluşturulmadı.
Şöyle bir durumla karşılaşabiliriz. mesela metin toplam 240 karakter, 1.parça 78 karakter aldı, 1. parça 76 karakter aldı, 78+76=154, 240-154-2(bu 2 karakter parçalama esnasında kazanılan 2 adet "/" ayracı)=84 yani son bölümde 4 karakter çıkmayacak, sadece 80 karakter kadar olan kısmı yazdırılmış olacak. Stok kartını açan arkadaş parçalanmış metin kutuları üzerinde manuel işlem yapabileceği için o zaman gerekli kısaltmaları yapabilir.
Örnekte farklı sayılarda örnekleri görebilmek için formun bağlı olduğu tabloda farklı uzunluklarda örnekler koydum.
Son Düzenleme: 14/10/2019, 16:36, Düzenleyen: hbal09. (Sebep: örnek üzerinden bir açıklama yapma ihtiyacı hissettim.)
Cevapla
#4
Butona tıklandığında olayındaki kodları aşağıdaki gibi düzenledim ve istediğim sonuca ulaştım. Mutlaka daha kısa yolları vardır ama ben bu şekilde yapabildim.
Kod:
Private Sub Komut27_Click()
Dim a, b, f, g, h, i, j As String
Dim x, y, z As Integer
a = ""
g = ""
Dim c, d, e As Variant
c = Split(Me.urun_tanim, "/")

If Me.sayTanim.Value <= 80 Then
Me.tanim1 = Me.urun_tanim
Me.tanim2 = ""
Me.tanim3 = ""
Else
For say = LBound(c) To UBound(c)
    If say = 0 Then
        a = a + CStr(c(say))
        b = ""
    Else
        a = a + "/" + CStr(c(say))
        If say - 1 = 0 Then
        b = b + CStr(c(say - 1))
        Else
        b = b + "/" + CStr(c(say - 1))
        End If
    End If
        If (Len(a) > 80 And Len(b) <= 80) Then
            Me.tanim1 = b
        End If
Next
End If
'2. part başlangıcı*******************************
f = Replace(Me.urun_tanim, Me.tanim1 + "/", "")
d = Split(f, "/")

If Len(f) <= 80 Then
Me.tanim2 = f
Me.tanim3 = ""
Else
For say = LBound(d) To UBound(d)
    If say = 0 Then
        g = g + CStr(d(say))
        h = ""
    Else
        g = g + "/" + CStr(d(say))
        If say - 1 = 0 Then
            h = h + CStr(d(say - 1))
        Else
            h = h + "/" + CStr(d(say - 1))
        End If
    End If
    If (Len(g) > 80 And Len(h) <= 80) Then
    Me.tanim2 = h
    End If
Next
End If

'3. part başlangıcı*******************************
i = Me.tanim1 + "/" + Me.tanim2
j = Replace(Me.urun_tanim, i + "/", "")
Me.tanim3 = j
End Sub

Saygılarımla.
Cevapla
#5
dilerim işinize yarar
sonuç doğru gibi geldi ama siz yine de test edin)
Dim txtGec, txtGec2 As String
Dim BytSnr As Byte

txtGec = Me.urun_tanim
Me.tanim1 = ""
Me.tanim2 = ""
Me.tanim3 = ""

For x = 1 To 3
if x=3 then
Controls("tanim" & x).Value = left(txtGec,80)
exit for
end if
txtGec2 = Left(txtGec, 81)
If Len(txtGec2) < 81 Then
    Controls("tanim" & x).Value = txtGec2
    Exit For
End If
BytSnr = InStrRev(txtGec2, "/")
Controls("tanim" & x).Value = Left(txtGec, BytSnr - 1)
txtGec = Mid(txtGec, BytSnr + 1)
Next x
yada
Dim x, y As Byte
Dim MetBol() As String
Dim txtGec, txtMetBol, txtMetBol2 As String
Me.tanim1 = ""
Me.tanim2 = ""
Me.tanim3 = ""
txtMetBol2 = Me.urun_tanim

For y = 1 To 3
    If Len(txtMetBol2) < 80 Then
        Controls("tanim" & y).Value = txtMetBol2
        Exit For
    End If
MetBol = Split(txtMetBol2, "/")
txtMetBol = MetBol(0)
  
   For x = 1 To UBound(MetBol)
        txtGec = txtMetBol
        txtMetBol = txtMetBol & "/" & MetBol(x)
        Controls("tanim" & y).Value = txtMetBol
        If Len(txtMetBol) > 80 Then
            Controls("tanim" & y).Value = txtGec
            txtMetBol2 = Mid(txtMetBol2, Len(txtGec) + 2)
            Exit For
        End If
    Next x
Next y
Cevapla
#6
sayın @hbal09 4. mesajda kullandığınız kodu, urun_tanımın 80den küçük olduğu durumlarda (4. kayıttaki gibi) hata sonuç üretiyor, 3 metin kutusu da aynı sonucu veriyor
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da