Что нового

[Данные, строки] Сравнение текста, помогите найти ошибку.

andrew123

Новичок
Сообщения
8
Репутация
0
Добрый день,
столкнулся с задачей, сравнить два документа, и все, что повторяется заменить пробелом в документе, который сравнивается.

Написал, привожу код:
Код:
#include <File.au3>

$FOF = FileOpen("C:\local_mashine\annuity.txt", 0)
$FOF1=FileOpen("C:\local_mashine\annuity_old.txt", 0)
$FOF2 = FileOpen("C:\local_mashine\annuity.txt", 2)

For $x = 0 To -1
   $x = $x+1
$line = FileReadLine($FOF,$x)
$line1 = FileReadLine($FOF1)
$result = StringCompare($line, $line1)
MsgBox('','возврат подстроки найденной',$result)

If $result = 0 Then
   ;Вместо строки в файле annuity.txt ставим пробел
  $newline = StringReplace($line, , ' ')
  $FW = FileWrite($FOF2,$newline)
  EndIf
Next
 MsgBox('','Результат','Сравнение файлов успешно завершено :)')   
FileClose($FOF)
FileClose($FOF1)
FileClose($FOF2)


Скрипт, не дает ошибки при работе, но заменяет весь текст пробелом, даже, если тексты разные, и данный фрагмент, не повторяется.
Еще один момент, почему-то, не выводиться первый MsgBox :stars:
Ребята, пожалуйста посмотрите, где может быть ошибка, подскажите, как исправить :IL_AutoIt_1:

Заранее благодарен :beer:
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
цикл не правилен в том что вы указали конец файла(последнюю строку) как -1 это не понятно для программы.
Вот так в принципе можно расчитать в вашем файле кол-во строк:
Код:
$file=stringsplit(fileread($FOF),@lf);в массиве $file[0]=будет количество строк в файле



Добавлено:
Сообщение автоматически объединено:

первый msgbox не вылетает потому что программа в цикл вообще не заходит, по причине выше написанной=)


Добавлено:
Сообщение автоматически объединено:

И мне кажется что от StringCompare по ходу скрипта ожидаете совсем не то что она(команда) выдаст :smile:
 

ildar

Осваивающий
Сообщения
252
Репутация
29
вместо
Код:
For $x = 0 To -1
попробуй
Код:
$stroke = _FileCountLines($FOF)
For $x = 0 To $stroke

да еще тут
Код:
$line1 = FileReadLine($FOF1)

не указал какую строку читать
Код:
$line1 = FileReadLine($FOF1,$x)
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Что то подобное соорудил, указав некоторые ошибки, но такое чувство что я сделал скорее всего не то что вы желали=)
Код:
#include <File.au3>
$FOF = FileOpen("C:\local_mashine\annuity.txt", 0)
$FOF1=FileOpen("C:\local_mashine\annuity_old.txt", 0)
$FOF2 = FileOpen("C:\local_mashine\annuity_new.txt", 2);Создаю новый файл так как у меня сомнения что FileOpen 2 раза откроет 1 и тот же файл с разными параметрами
For $x=1 To _FileCountLines($FOF);$x=1 потому что в справке ясно написано что первая строка в файле начинается с цифры 1 а не 0!
	$line = FileReadLine($FOF,$x)
	$line1 = FileReadLine($FOF1,$x)
	If Not ($line==$line1) Then
		MsgBox(0,'',"Строка первого файла отличается от второй:"&@CRLF& _
				"1 файл строка - "&$line&@CRLF& _
				"2 файл строка - "&$line1)
		$line=""
	EndIf
	FileWrite($FOF2,$line)
	#cs
	$result = StringCompare($line, $line1)
	MsgBox('','возврат подстроки найденной',$result)
	If $result = 0 Then - StringCompare возвратит 0 когда строки совпадут, а тут вы собираетесь делать наоборот что было описано в первом посте
   ;Вместо строки в файле annuity.txt ставим пробел
  	$newline = StringReplace($line, , ' ') - SciTe выдает синтаксическую ошибку, у вас 2 параметр отсутствует!
  	$FW = FileWrite($FOF2,$newline) - Ну и что, вы думаете подобное заменит строку где требуется?=)
	EndIf
	#ce
Next
MsgBox('','Результат','Сравнение файлов успешно завершено :)')
FileClose($FOF)
FileClose($FOF1)
FileClose($FOF2)
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
imho, проблема вот в этом.
Код:
$FOF = FileOpen("C:\local_mashine\annuity.txt", 0)
$FOF2 = FileOpen("C:\local_mashine\annuity.txt", 2)


Попробуйте так
Код:
$FOF = FileOpen("C:\local_mashine\annuity.txt", 0)
$FOF1=FileOpen("C:\local_mashine\annuity_old.txt", 0)
$FOF2 = FileOpen("C:\local_mashine\annuity_new.txt", 2)
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
OffTopic:
Скопипастить у меня все решили да? :D :whistle:
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
andrew123 [?]
сравнить два документа
Вариант (построчно, без учёта пустых строк)
Код:
$path1 = @ScriptDir & "\file1.txt"
$path2 = @ScriptDir & "\file2.txt"
$rzlt1 = @ScriptDir & "\rzlt1.txt"
$rzlt2 = @ScriptDir & "\rzlt2.txt"

$hFile = FileOpen($path1)
$only1 = ""
$only2 = FileRead($path2)

While 1
  $Line = FileReadLine($hFile)
  If @error = -1 Then ExitLoop
  If StringStripWS($Line, 3) = "" Then ContinueLoop
  $only2 = StringReplace($only2, $Line, "", 1)
  If @extended = 0 Then $only1 &= $Line & @CRLF
WEnd

FileClose($hFile)

$hFile = FileOpen($rzlt1, 2)
FileWrite($hFile, $only1)
FileClose($hFile)

$hFile = FileOpen($rzlt2, 2)
FileWrite($hFile, StringStripWS($only2, 4))
FileClose($hFile)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
andrew123 [?]
сравнить два документа
Строки во втором документе обязательно проверять на совпадение по номерам строк или вхождение на любой строке? И дайте два документа для сравнения.
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
andrew123
Compare strings, исходники и функции в комплекте. Но пробелом не заменяет, а выдаёт строки которых нет в другом файле, не важно в какой они позиции.
То что у вас, первая лишняя строка сместит совпадение по позициям и все остальные строки естественно не совпадут и результат будет пустые данные от первого сдвига позиции.
 
Автор
A

andrew123

Новичок
Сообщения
8
Репутация
0
Спасибо большое всем, кто откликнулся. Исправил указанные недостатки и все заработало! Да еще раз убеждаюсь, что когда зациклен на задаче, не видишь своих ошибок.

:IL_AutoIt_1:
 
Верх