Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Работа с массивами. (http://forum.oszone.net/showthread.php?t=168960)

Russo 02-03-2010 15:30 1359548

Работа с массивами.
 
Нужна помощь!
следующая ситуация: есть четыре текстовых файла. для удобства именуем: 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 1359594

Russo,
Похоже это то,что тебе нужно :
Библиотека для сравнения строк/чисел/1D и 2D массивов

kaster 02-03-2010 17:00 1359624

Russo, что значит имеют вид?
Цитата:

Цитата Russo
1000205275
1000223812
1000238288
4474
1000031760
227334
1000014533
1000010159
1000042383 »

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

Цитата Russo
хотел сделать с циклами методом перебора »

по другому никак. все равно перебирать.
Цитата:

Цитата Russo
но понял что с массивами быстрее и проще »

не быстрее, и уж точно не проще, раз спрашиваешь ;)
Цитата:

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

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

Russo 02-03-2010 17:12 1359636

не файлы проверить, а строки на предмет вхождения в другие файли. интересует не идентичночть файлов, а присутствие в них строк из первого файла.

Цитата:

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

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

gregaz 02-03-2010 17:16 1359641

Цитата:

Цитата Russo
а присутствие в них строк из первого файла. »

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

madmasles 02-03-2010 17:34 1359655

Russo,
Если я правильно понял задачу, то у меня так получилось:
Код:

#include <File.au3>
#include <Array.au3>

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 $i = 1 To UBound($aArray1) - 1
    $error2 = _ArraySearch($aArray2, $aArray1[$i])
    If $error2 = -1 Then
        MsgBox(48, $file1 & " строка " & $i, "Данные файла " & $file2 & " в строке № " & $i _
                &
" не совпадают", 5)
    Else
        MsgBox(64, $file1 & " строка " & $i, "Данные файла " & $file2 & " в строке № " & $i _
                &
" совпадают", 5)
    EndIf
    $error3 = _ArraySearch($aArray3, $aArray1[$i])
    If $error3 = -1 Then
        MsgBox(48, $file1 & " строка " & $i, "Данные файла " & $file3 & " в строке № " & $i _
                &
" не совпадают", 5)
    Else
        MsgBox(64, $file1 & " строка " & $i, "Данные файла " & $file3 & " в строке № " & $i _
                &
" совпадают", 5)
    EndIf
    $error4 = _ArraySearch($aArray4, $aArray1[$i])
    If $error4 = -1 Then
        MsgBox(48, $file1 & " строка " & $i, "Данные файла " & $file4 & " в строке № " & $i _
                &
" не совпадают", 5)
    Else
        MsgBox(64, $file1 & " строка " & $i, "Данные файла " & $file4 & " в строке № " & $i _
                &
" совпадают", 5)
    EndIf
Next

Построчно 1.txt сравнивается по-очереди с 2, 3 и 4.txt и показывает, совпадают строки или нет.

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

gregaz 02-03-2010 17:37 1359659

Проверка наличия совпадений строк 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 1360236

спасибо! код от madmasles подошел практически идеально. gregaz также спасибо за потраченое время и труд!!!
РЕШЕНО!


Время: 03:07.

Время: 03:07.
© OSzone.net 2001-