Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Поиск удобной программы для сравнения файлов 
Author Message
WindR



PostPosted: Tue Jun 09, 2020 18:21    Post subject: Reply with quote

Flasher
Нужно модифицировать
Code:
' INI_sorted.vbs
'
' Sorts .INI files.
' Usage:
'  WScript INI_sorted.vbs <input file> <output file>
'
' Notes:
'  Handles Unicode or ASCII encodings
'  Handles line continuations ('\' at end of line)
'  Blank grouped with next
'  Comment grouped with previous

Option Explicit

' OpenTextFile format
Const TristateTrue = -1
Const TristateFalse = 0
' OpenTextFile iomode
Const ForReading = 1

Dim FileSys
Set FileSys = CreateObject("Scripting.FileSystemObject")
If FileSys.FileExists(WScript.Arguments(1)) Then
   FileSys.DeleteFile WScript.Arguments(1)
End If
' Calculate codepage (Unicode or ASCII)
Dim CodePage, SrcFile
Set SrcFile = FileSys.OpenTextFile(WScript.Arguments(0), ForReading, False, TristateFalse)
If Left(SrcFile.ReadLine, 2) = Chr(255) & Chr(254) Then
   CodePage = TristateTrue
Else
   CodePage = TristateFalse
End If
SrcFile.Close
' Load lines
Dim BOM, HasBOM, I, Lines()
BOM = Chr(239) & Chr(187) & Chr(191)
HasBOM = 0
Set SrcFile = FileSys.OpenTextFile(WScript.Arguments(0), ForReading, False, CodePage)
I = 0
Do While Not SrcFile.AtEndOfStream
   ReDim Preserve Lines(I)
   Lines(I) = SrcFile.ReadLine
   If (I = 0) and (Left(Lines(I), Len(BOM)) = BOM) Then
      HasBOM = 1
      Lines(I) = Right(Lines(I), Len(Lines(I)) - Len(BOM))
   End If
   I = I + 1
Loop
SrcFile.Close
' Calculate ids
Dim Blank, Continued, IDs(), J, PropName, S, SectName, SList
Blank = True
Continued = False
ReDim IDs(UBound(Lines))
PropName = Chr(0)
SectName = Chr(0)
For I = 0 To UBound(Lines)
   S = Trim(Lines(I))
   If S = "" Then ' Blank
      Blank = True
      Continued = False
   ElseIf Continued Then ' Continuation of previous
      If Right(S, 1) <> "\" Then
         Continued = False
      End If
   ElseIf Left(S, 1) = ";" Then ' Comment
   ElseIf Left(S, 1) = "[" Then ' Section
      Blank = False
      PropName = Chr(0)
      SList = Split(S, "]", -1, vbTextCompare)
      If IsArray(SList) Then
         SectName = Mid(SList(0), 2)
      Else
         SectName = Mid(S, 2)
      End If
      If SectName = "" Then
         SectName = Chr(0)
      End If
   Else ' Property
      Blank = False
      If Right(S, 1) = "\" Then
         S = Left(S, Len(S) - 1)
         Continued = True
      End If
      SList = Split(S, "=", -1, vbTextCompare)
      If IsArray(SList) Then
         PropName = SList(0)
      Else
         PropName = S
      End If
      If PropName = "" Then
         PropName = Chr(0)
      End If
   End If
   If Blank Then
      S = ""
   Else
      S = SectName & vbTab & PropName
   End If
   IDs(I) = S
   If (S <> "") And (I > 0) Then
      J = I - 1
      Do While (IDs(J) = "")
         IDs(J) = S
         If J = 0 Then
            Exit Do
         End If
         J = J - 1
      Loop
   End If
Next
For I = 0 To UBound(Lines)
   If IDs(I) = "" Then
      IDs(I) = vbTab
   End If
   IDs(I) = IDs(I) & vbTab & Right("0000000000" & I, 10)
Next
' Sort
QuickSort 0, UBound(Lines)
' Save
Dim TgtFile
Set TgtFile = FileSys.CreateTextFile(WScript.Arguments(1), True, CodePage = TristateTrue)
If HasBOM <> 0 Then
   Lines(0) = BOM & Lines(0)
End If
For I = 0 To UBound(Lines)
   TgtFile.WriteLine Lines(I)
Next
TgtFile.Close

Sub QuickSort(Lo, Hi)
   Dim I, J, P, T
   Do
      I = Lo
      J = Hi
      P = Int((Lo + Hi) / 2)
      Do
         Do While IDs(P) > IDs(I)
            I = I + 1
         Loop
         Do While IDs(J) > IDs(P)
            J = J - 1
         Loop
         If I > J Then
            Exit Do
         End If
         T = IDs(I)
         IDs(I) = IDs(J)
         IDs(J) = T
         T = Lines(I)
         Lines(I) = Lines(J)
         Lines(J) = T
         If P = I Then
            P = J
         ElseIf P = J Then
            P = I
         End If
         I = I + 1
         J = J - 1
      Loop While (I <= J)
   If Lo < J Then
      QuickSort Lo, J
   End If
   Lo = I
   If I >= Hi Then
      Exit Do
   End If
   Loop
End Sub

чтобы он сортировал строки просто отбросив нечисловые знаки до первого вхождения числа.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group