تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] استفسار :- التاكد من وجود سطر جديد في الملف
#1
السلام عليكم ورحمة الله 

يسعد الله اوقاتكم 

عندي فكرة اريد تنفيذها نص الفكرة قمت بتنفيذها باقي النصف  الاخر 


وهيه عباره كود يقراء ملف معين text  مثلا

في حالت وجود سطر جديد يقوم بسحب البيانات لهذا السطر وتنزيله في قاعدة البيانات 

انا الكود اللي عني شغال بس في كل مرة يقراء الملف كامل واذا البيانات موجوده ما يقوم بتنزيلها واذا البيانات جديد يقوم بتنزيلها

بس اعتقد كذا مرهق على البرنامج في كل مرة يقراء الملف كامل

ما اعرف هل هناك طريقه ان يقراء اخر سطر فقط وينزل البيانات

اليكم الكود الخاص بي 

كود :
   Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load

Timer7.Interval = 3000
       Timer7.Start() 'Timer starts functioning

       cmdCheckCount.CommandText = String.Format("SELECT COUNT(CALLop) FROM DB{0} WHERE (CALLop = @CALLop) AND (DateNumber = @DateNumber) AND (time_on = @time_on)", strcallbk)
       cmdCheckCount.Parameters.Clear()
       cmdCheckCount.Parameters.Add("@CALLop", SqlDbType.VarChar)
       cmdCheckCount.Parameters.Add("@DateNumber", SqlDbType.VarChar)
       cmdCheckCount.Parameters.Add("@time_on", SqlDbType.VarChar)
       '============================================================
       cmdInsert.CommandText = String.Format("INSERT INTO DB{0} (CALLop,qso_date,timek,bands,modes,station_callsign,dxcc,cqz,ituz,rst_sent,rst_rcvd,country,LAT,LON,GRIDSQUARE,PFX,freq,DateNumber,time_on,operato,Continent) Values (@CALLop,@qso_date,@timek,@bands,@modes,@station_callsign,@dxcc,@cqz,@ituz,@rst_sent,@rst_rcvd,@country,@LAT,@LON,@GRIDSQUARE,@PFX,@freq,@DateNumber,@time_on,@operato,@Continent)", strcallbk)
       cmdInsert.Parameters.Clear()
       cmdInsert.Parameters.Add("@CALLop", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@qso_date", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@timek", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@bands", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@modes", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@station_callsign", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@dxcc", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@cqz", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@ituz", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@rst_sent", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@rst_rcvd", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@country", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@LAT", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@LON", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@GRIDSQUARE", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@PFX", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@freq", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@DateNumber", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@time_on", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@operato", SqlDbType.VarChar)
       cmdInsert.Parameters.Add("@Continent", SqlDbType.VarChar)
  End Sub


Private Sub Timer7_Tick(sender As Object, e As EventArgs) Handles Timer7.Tick


       Dim SavePathft8 As String = JT65PathX

       If File.Exists(SavePathft8) Then




           If File.ReadAllText(JT65PathX).Length = 0 Then



           Else

               txt = Computer.FileSystem.ReadAllText(JT65PathX)

               Dim Rgx As Regex = New Regex("<eor>")

               Dim Rgx2 As Regex = New Regex("<EOR>")





               If Rgx.IsMatch(txt) Then
                   ms = Strings.Split(txt, "" & "eor" & ">", -1, CompareMethod.Binary)
                   conXXCXX.Open()

                   Using transaction = conXXCXX.BeginTransaction()
                       cmdCheckCount.Transaction = transaction
                       cmdInsert.Transaction = transaction
                       For Each txtLine As String In ms
                           Call AddDataXFT8(iFT8)
                           iFT8 += 1
                       Next
                       transaction.Commit()
                   End Using


                   conXXCXX.Close()





               ElseIf Rgx2.IsMatch(txt) Then

                   ms = Strings.Split(txt, "" & "EOR" & ">", -1, CompareMethod.Binary)

                   conXXCXX.Open()


                   Using transaction = conXXCXX.BeginTransaction()
                       cmdCheckCount.Transaction = transaction
                       cmdInsert.Transaction = transaction
                       For Each txtLine As String In ms
                           Call AddDataXFT8(iFT8)
                           iFT8 += 1
                       Next
                       transaction.Commit()
                   End Using
                   conXXCXX.Close()

               End If
           End If
       End If


     
       'Timer7.Stop()
   End Sub




   Private Sub AddDataXFT8(ByVal i As Integer)
       On Error Resume Next
       Debug.Print(String.Format("{0} | Start Add :{1:mm:ssss}", i, Now))

       Dim colcall As String = Regex.Match(ms(i), "(?<=<call.+?>).+?(?=<)", RegexOptions.IgnoreCase Or RegexOptions.Singleline).Value
       Dim qso_date As String = Regex.Match(ms(i), "(?<=<qso_date.+?>).+?(?=<)", RegexOptions.IgnoreCase Or RegexOptions.Singleline).Value
       Dim coltime_on As String = Trim(Regex.Match(ms(i), "(?<=<time_on.+?>).+?(?=<)", RegexOptions.IgnoreCase Or RegexOptions.Singleline).Value)
       Dim colbands As String = Regex.Match(ms(i), "(?<=<band.+?>).+?(?=<)", RegexOptions.IgnoreCase Or RegexOptions.Singleline).Value
       Dim colmodes As String = Regex.Match(ms(i), "(?<=<mode.+?>).+?(?=<)", RegexOptions.IgnoreCase Or RegexOptions.Singleline).Value
       Dim colstation_callsign As String = Regex.Match(ms(i), "(?<=<station_callsign.+?>).+?(?=<)", RegexOptions.IgnoreCase Or RegexOptions.Singleline).Value
       Dim colfreq As String = Regex.Match(ms(i), "(?<=<freq.+?>).+?(?=<)", RegexOptions.IgnoreCase Or RegexOptions.Singleline).Value
       Dim colGRIDSQUARE As String = Regex.Match(ms(i), "(?<=<GRIDSQUARE.+?>).+?(?=<)", RegexOptions.IgnoreCase Or RegexOptions.Singleline).Value
       Dim colrst_sent As String = Regex.Match(ms(i), "(?<=<rst_sent.+?>).+?(?=<)", RegexOptions.IgnoreCase Or RegexOptions.Singleline).Value
       Dim colrst_rcvd As String = Regex.Match(ms(i), "(?<=<rst_rcvd.+?>).+?(?=<)", RegexOptions.IgnoreCase Or RegexOptions.Singleline).Value
       Dim operato As String = Regex.Match(ms(i), "(?<=<operator.+?>).+?(?=<)", RegexOptions.IgnoreCase Or RegexOptions.Singleline).Value
     
     

       Dim qsodate As String = qso_date.Trim()
       Dim d As Date = Date.ParseExact(qsodate, "yyyymmdd", System.Globalization.DateTimeFormatInfo.InvariantInfo)


       Dim bkd As String = d.ToString("yyyy/mm/dd", System.Globalization.CultureInfo.GetCultureInfo("en-US"))


       Dim coltimex As String = coltime_on.Trim()

       If Trim(coltimex.Length) = 4 Then

           timek = Regex.Replace(coltime_on, "(\d{2})(\d{2})", "$1:$2")

       ElseIf coltimex.Length = 6 Then


           timek = Regex.Replace(coltime_on, "(\d{2})(\d{2})(\d{2})", "$1:$2")
       ElseIf coltimex.Length = 7 Then

           timek = Regex.Replace(coltimex, Strings.Right(coltimex, 3), "")
       Else
           timek = Nothing
       End If



       If coltimex.Length = 6 Then


           timek1 = Regex.Replace(coltime_on, "(\d{2})(\d{2})(\d{2})", "$1$2")

       Else
           timek1 = Nothing
       End If


     



       colstation_callsign = strcallbk
       operato = strcallbk


       cmdCheckCount.Parameters("@CALLop").Value = colcall.Trim()
       cmdCheckCount.Parameters("@DateNumber").Value = qso_date.Trim()
       cmdCheckCount.Parameters("@time_on").Value = coltimex.Trim()
       If cmdCheckCount.ExecuteScalar = 0 Then
           cmdInsert.Parameters("@CALLop").Value = colcall.Trim()
           cmdInsert.Parameters("@qso_date").Value = bkd.Trim()
           cmdInsert.Parameters("@timek").Value = Trim(Convert.ToString(timek))
           cmdInsert.Parameters("@bands").Value = colbands.Trim()
           cmdInsert.Parameters("@modes").Value = colmodes.Trim()
           cmdInsert.Parameters("@station_callsign").Value = colstation_callsign.Trim()
           cmdInsert.Parameters("@dxcc").Value = bk9
           cmdInsert.Parameters("@cqz").Value = bk6
           cmdInsert.Parameters("@ituz").Value = bk7
           cmdInsert.Parameters("@rst_sent").Value = colrst_sent.Trim()
           cmdInsert.Parameters("@rst_rcvd").Value = colrst_rcvd.Trim()
           cmdInsert.Parameters("@country").Value = bk3
           cmdInsert.Parameters("@LAT").Value = bk4
           cmdInsert.Parameters("@LON").Value = bk5
           cmdInsert.Parameters("@GRIDSQUARE").Value = colGRIDSQUARE.Trim()
           cmdInsert.Parameters("@PFX").Value = bk2
           cmdInsert.Parameters("@freq").Value = colfreq.Trim()
           cmdInsert.Parameters("@DateNumber").Value = qso_date.Trim()
           cmdInsert.Parameters("@time_on").Value = coltimex.Trim()
           cmdInsert.Parameters("@operato").Value = operato.Trim()
           cmdInsert.Parameters("@Continent").Value = bk8

           cmdInsert.ExecuteNonQuery()
           Application.DoEvents()
 
       End If
   End Sub


في الحدث  Private Sub Timer7_Tick

كود :
Dim SavePathft8 As String = JT65PathX
هنا يتاكد من وجود الملف
JT65PathX

للعلم هذا الكود يقراء الملفات بصيغة 
adi

[attachment=19600]

log.adi.txt

يرجى مسح .txt  لان المنتدى لا يدعم ملفات adi

المهم بعد التاكد من وجود الملف


كود :
If File.ReadAllText(JT65PathX).Length = 0 Then

يتاكد ان الملف في شي او فاضي
اذا في شي يبدى في العمل



الكود واضح بس سؤالي هل في طريقه لفكرة قراءة اخر سطر فقط 
للعلم الملف الثاني يتم تعبئته عن طريق برنامج اخر
log.adi

بارك الله فيكم واسف على الاطاله
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
استفسار :- التاكد من وجود سطر جديد في الملف - بواسطة dubai.eig - 20-09-18, 01:32 PM


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم