PDA

Показать полную графическую версию : [решено] Работа с массивами.


Russo
02-03-2010, 15:30
Нужна помощь!
следующая ситуация: есть четыре текстовых файла. для удобства именуем: 1.txt, 2.txt, 3.txt, 4.txt
все имеют след вид:
1000205275
1000223812
1000238288
4474
1000031760
227334
1000014533
1000010159
1000042383
и тд.

нужно взять число из первой строчки 1.txt и проверить если не повторяется в других файлах(2.txt, 3.txt, 4.txt) то сделать что-то, и то же самое с остальныим строчками...
хотел сделать с циклами методом перебора, но понял что с массивами быстрее и проще, да вот беда не знаю как. не работал с массивами.

и еще вопрос, как отразится на скорости работы если в файлах будет 1000 строк, или 5000??

gregaz
02-03-2010, 16:43
Russo,
Похоже это то,что тебе нужно :
Библиотека для сравнения строк/чисел/1D и 2D массивов (http://autoit-script.ru/index.php?topic=1247.0)

kaster
02-03-2010, 17:00
Russo, что значит имеют вид?
1000205275
1000223812
1000238288
4474
1000031760
227334
1000014533
1000010159
1000042383 »
никаким видом тут не пахнет. где общая черта содержимого этих файлов? например 1, 2,3 строки начинаются на 1000. или 4 строка обязательно 4значное число и т.д.
хотел сделать с циклами методом перебора »
по другому никак. все равно перебирать.
но понял что с массивами быстрее и проще » не быстрее, и уж точно не проще, раз спрашиваешь ;)
и еще вопрос, как отразится на скорости работы если в файлах будет 1000 строк, или 5000?? »
ответ очевиден - чем больше строк, тем больше время выполнения.
вобщем, сформулируй окончательно задачу предоставив как можно больше инфы.
а то, я например понял так. нужно просто проверить файлы на идентичность. если файлы идентичны, сделать действие. если нет, пропустить или сделать другое действие.

Russo
02-03-2010, 17:12
не файлы проверить, а строки на предмет вхождения в другие файли. интересует не идентичночть файлов, а присутствие в них строк из первого файла.

никаким видом тут не пахнет. где общая черта содержимого этих файлов? например 1, 2,3 строки начинаются на 1000. или 4 строка обязательно 4значное число и т.д. »

имел в виду что все строки состоят из чисел максималной длины 10 символов

gregaz
02-03-2010, 17:16
а присутствие в них строк из первого файла. »

А потом надо будет делать то же для других файлов или проверка идет только по 1- му файлу ?

madmasles
02-03-2010, 17:34
Russo,
Если я правильно понял задачу, то у меня так получилось: #include <File.au3>
#include <Array.au3>

Dim (http://www.autoitscript.com/autoit3/docs/keywords.htm#Dim) $aArray1, $aArray2, $aArray3, $aArray4

$file1 = "1.txt"
$file2 = "2.txt"
$file3 = "3.txt"
$file4 = "4.txt"

_FileReadToArray($file1, $aArray1)
_FileReadToArray($file2, $aArray2)
_FileReadToArray($file3, $aArray3)
_FileReadToArray($file4, $aArray4)

For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) UBound (http://www.autoitscript.com/autoit3/docs/functions/UBound.htm)($aArray1) - 1
$error2 = _ArraySearch($aArray2, $aArray1[$i])
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $error2 = -1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(48, $file1 & " строка " & $i, "Данные файла " & $file2 & " в строке № " & $i _
& " не совпадают", 5)
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, $file1 & " строка " & $i, "Данные файла " & $file2 & " в строке № " & $i _
& " совпадают", 5)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
$error3 = _ArraySearch($aArray3, $aArray1[$i])
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $error3 = -1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(48, $file1 & " строка " & $i, "Данные файла " & $file3 & " в строке № " & $i _
& " не совпадают", 5)
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, $file1 & " строка " & $i, "Данные файла " & $file3 & " в строке № " & $i _
& " совпадают", 5)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
$error4 = _ArraySearch($aArray4, $aArray1[$i])
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $error4 = -1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(48, $file1 & " строка " & $i, "Данные файла " & $file4 & " в строке № " & $i _
& " не совпадают", 5)
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, $file1 & " строка " & $i, "Данные файла " & $file4 & " в строке № " & $i _
& " совпадают", 5)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)Построчно 1.txt сравнивается по-очереди с 2, 3 и 4.txt и показывает, совпадают строки или нет.

PS
Наверное, можно сделать изящнее и проще...

gregaz
02-03-2010, 17:37
Проверка наличия совпадений строк 1- го файла в остальных :

#include <Array.au3>
#include <File.au3>
$sStr=''
For $i=2 To 4
$hFile = FileOpen($i & ".txt", 0)
$sStr &= FileRead ( $hFile ) & @CRLF
FileClose ( $hFile )
Next
MsgBox(0,'$sStr',$sStr)
Dim $aRecords
_FileReadToArray("1.txt",$aRecords)
_ArrayDisplay($aRecords)
For $i = 1 To UBound($aRecords)-1
If StringRegExp ( $sStr, $aRecords[$i],0)=1 Then
Msgbox(0,$aRecords[$i] ,'Совпадение найдено')
Else
Msgbox(0,$aRecords[$i] ,'Совпадение не найдено')
EndIf
Next

Russo
03-03-2010, 12:21
спасибо! код от madmasles подошел практически идеально. gregaz также спасибо за потраченое время и труд!!!
РЕШЕНО!




© OSzone.net 2001-2012