Global $InstallDir = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") & "\Include\" Local $Fichier = FileOpenDialog("Nom du fichier source", @ScriptDir, "AutoIt (*.au3)", 1) If(Not(@error)) Then Local $Ligne = InputBox("Ligne", "Veuillez entrer le numéro de la ligne d'erreur du .exe") If(Not(@error)) Then Local $Retour = GetRealErrorLine($Fichier, $Ligne) If($Retour[2]) Then MsgBox(0, "Résultat", "Fichier :" & @CRLF & $Retour[1] & @CRLF & "Ligne :" & $Retour[0]) Else MsgBox(0, "Erreur", "Ligne introuvable") EndIf EndIf EndIf Func GetRealErrorLine($LongPath, $Ligne) Local $Tab[1] Local $Fichier = GetFileName($LongPath) $ScriptDir = StringTrimRight($LongPath, StringLen($Fichier)) Return CalculeRealLigne($ScriptDir, $Fichier, $Ligne, $Tab) EndFunc Func CalculeRealLigne($ScriptDir, $Fichier, $Ligne, ByRef $IncludeOnce, $AlreadyCount = 0) Local $FullFichier = $ScriptDir & $Fichier $Fichier = GetFileName($FullFichier) $ScriptDir = StringTrimRight($FullFichier, StringLen($Fichier)) Local $PathUsed = $InstallDir If(Not(FileExists($PathUsed & $Fichier))) Then $PathUsed = $ScriptDir EndIf If(Not(FileExists($PathUsed & $Fichier))) Then Local $TabEmpty[2] = [0, ""] Return SetError(1, 0, $TabEmpty) EndIf Local $Count[3] = [0, $PathUsed & $Fichier, False] Local $CountWhite = 0 Local $CommentStart = False Local $Contenu = FileRead($PathUsed & $Fichier) $Contenu = StringSplit($Contenu, @CRLF, 3) For $i = 0 To UBound($Contenu, 1)-1 If($Contenu[$i] <> "") Then Local $Temp = StringReplace($Contenu[$i], " ", "") $Temp = StringReplace($Temp, " ", "") If(StringRight($Temp, 1) = "_" Or StringInStr($Temp, "_;")) Then If(StringInStr($Temp, "_;")) Then $Temp = StringLeft($Temp, StringInStr($Temp, "_;")) Else $Temp = StringTrimRight($Temp, 1) EndIf $Contenu[$i+1] = $Temp & $Contenu[$i+1] Else If(StringLeft($Temp, 3) = "#CS" Or StringLeft($Temp, 15) = "#comments-start") Then $CommentStart = True EndIf If($CommentStart) Then If(StringLeft($Temp, 3) = "#CE" Or StringLeft($Temp, 13) = "#comments-end") Then $CommentStart = False EndIf ElseIf(StringLeft($Temp, 1) <> ";") Then If(StringInStr($Contenu[$i], "#include")) Then If(StringInStr($Contenu[$i], "#include-once")) Then If(AddIncOnce($IncludeOnce, $Fichier)) Then ExitLoop EndIf Else Local $Chars[2] = ['"', '"'] If(Not(StringInStr($Contenu[$i], '"'))) Then $Chars[0] = "<" $Chars[1] = ">" EndIf Local $Temp = StringSplit($Contenu[$i], $Chars[0], 3) $Temp = StringSplit($Temp[1], $Chars[1], 3) $Temp = $Temp[0] Local $CountTemp = CalculeRealLigne($ScriptDir, $Temp, $Ligne, $IncludeOnce, $Count[0]+$AlreadyCount) $Count[0] += $CountTemp[0] If($CountTemp[2]) Then $Count = $CountTemp ExitLoop EndIf EndIf Else $Count[0] += 1 EndIf EndIf EndIf EndIf $CountWhite += 1 If($Count[0] + $AlreadyCount >= $Ligne) Then $Count[0] = $CountWhite $Count[2] = True ExitLoop EndIf Next Return $Count EndFunc Func AddIncOnce(ByRef $Tab, $IncOnce) Local $Contain = False For $i = 0 To UBound($Tab, 1)-2 If($Tab[$i] = $IncOnce) Then $Contain = True ExitLoop EndIf Next If($Contain = False) Then $Tab[UBound($Tab, 1)-1] = $IncOnce ReDim $Tab[UBound($Tab, 1)+1] EndIf Return $Contain EndFunc Func GetFileName($LongPath) $LongPath = StringReplace($LongPath, "/", "\") Local $Fichier = StringSplit($LongPath, "\", 3) Return $Fichier[UBound($Fichier, 1)-1] EndFunc