Π?ΠΌΠΏΠΎΡ€Ρ‚ банковской выписки

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΈΠ· GedeminWiki
(Различия ΠΌΠ΅ΠΆΠ΄Ρƒ вСрсиями)
ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ: навигация, поиск
(β†’β€ŽParseStatement)
(β†’β€ŽParseStatement)
Π‘Ρ‚Ρ€ΠΎΠΊΠ° 38: Π‘Ρ‚Ρ€ΠΎΠΊΠ° 38:
  
 
Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ выписки, указанная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ счСта, Π΄Π°Ρ‚Ρƒ выписки ΠΈ вмСстС с Π΅Π΅ тСкстом ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ ParseOneStatement.
 
Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ выписки, указанная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ счСта, Π΄Π°Ρ‚Ρƒ выписки ΠΈ вмСстС с Π΅Π΅ тСкстом ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ ParseOneStatement.
 +
 +
=== ParseOneStatement ===

ВСрсия 23:27, 25 фСвраля 2007

ΠžΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· тСкстововго Ρ„Π°ΠΉΠ»Π° Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π“Π΅Π΄Ρ‹ΠΌΠΈΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнного ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°, Ρ‚Π°ΠΊ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ рСгулярныС выраТСния. Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим Π²Ρ‚ΠΎΡ€ΠΎΠΉ способ. Π’ качСствС ΠΎΠ±Ρ€Π°Π·Ρ†Π° Ρ„Π°ΠΉΠ»Π° с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ возьмСм Π±Π°Π½ΠΊΠΎΠ²ΡΠΊΡƒΡŽ выписку Π‘Π΅Π»Π°Π³Ρ€ΠΎΠΏΡ€ΠΎΠΌΠ±Π°Π½ΠΊΠ°. Как Π²ΠΈΠ΄Π½ΠΎ, содСрТимоС Ρ„Π°ΠΉΠ»Π° -- это выписка ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ»ΠΈ нСскольким банковским счСтам. НапишСм ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ ParseFile, которая Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» с диска Π² строку, ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· Π”ΠžΠ‘ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ Ρ€Π°Π·Π±ΠΎΡ€Π° выписки ParseStatement:

ParseFile

Sub ParseFile
  Const ForReading = 1
  Dim s
  s = System.OEMToAnsi(CreateObject("Scripting.FileSystemObject")._
    OpenTextFile("c:\temp\vyp.txt", ForReading).ReadAll)
  ParseStatement s
End Sub

Π—Π°Π΄Π°Ρ‡Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ParseStatement -- Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ тСкст Π½Π° ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Π΅ выписки ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ ParseOneStatement, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π΅ΠΉ Π½Π° Π²Ρ…ΠΎΠ΄ счСт, Π΄Π°Ρ‚Ρƒ выписки ΠΈ Π΅Π΅ тСкст:

ParseStatement

Sub ParseStatement(s)
  Dim regEx, Matches, I, J
  Set regEx = CreateObject("VBScript.RegExp")
  regEx.IgnoreCase = True
  regEx.Global = True
  regEx.Pattern = "Π›ΠΈΡ†Π΅Π²ΠΎΠΉ\s+ΠΏΠΎ\s+счСту\s+N\s+(\d{4})-(\d{9}).+Π·Π°\D+(\d{1,2})\.(\d{1,2})\.(\d{1,4})" 

  Set Matches = regEx.Execute(s)
  For I = 1 To Matches.Count
   If I = Matches.Count Then
     J = Len(s)
   Else
     J = Matches(I).FirstIndex
   End If
   ParseOneStatement Matches(I - 1).SubMatches(0) & Matches(I - 1).SubMatches(1), _
     DateSerial(Matches(I - 1).SubMatches(4), Matches(I - 1).SubMatches(3), Matches(I - 1).SubMatches(2)), _
     Mid(s, Matches(I - 1).FirstIndex, J - Matches(I - 1).FirstIndex)
  Next
End Sub

Как Π²ΠΈΠ΄Π½ΠΎ, ΠΌΡ‹ распознаСм выписки Π² Ρ„Π°ΠΉΠ»Π΅ ΠΏΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΡƒ. ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит строку "Π›ΠΈΡ†Π΅Π²ΠΎΠΉ счСт". Из Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΌΡ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ€ счСта ΠΈ Π΄Π°Ρ‚Ρƒ выписки. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ счСт ΠΌΡ‹ "склСиваСм" ΠΈΠ· Π΄Π²ΡƒΡ… частСй, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π΅ ΠΎΠ½ содСрТит Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ -- дСфис. Π”Π°Ρ‚Ρƒ ΠΈΠ· тСкста ΠΌΡ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΏΠΎ-ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: дСнь, мСсяц ΠΈ Π³ΠΎΠ΄, объСдиняя ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ DateSerial.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ выписки, указанная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ счСта, Π΄Π°Ρ‚Ρƒ выписки ΠΈ вмСстС с Π΅Π΅ тСкстом ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ ParseOneStatement.

ParseOneStatement

ΠŸΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ инструмСнты
ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π° ΠΈΠΌΡ‘Π½

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹
ДСйствия
Навигация
Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹