Что нового

Скрипт считывает не все строки с текстового файла

Dk

Новичок
Сообщения
358
Репутация
2
Столкнулся со следующей проблемой

Есть текстовой фаил там примерно 29 тыс строк.
Моя программа открывает его и должна считывать определённыe строки с определённого места...
Но при открытии через Autoit он видит только первые 2500 строк.
Где может лежать ошибка?

_

Код:
$data = FileRead(@ScriptDir & '/item-ISBN-Preis1.3.txt')
$items = StringRegExp($data, '(?m)^Item:([A-Za-z0-9\s]*)ISBN-10:([A-Za-z0-9\s]*)ISBN-13:([A-Za-z0-9\s]*)Price:.*$', 4)


Item: 130770055662 ISBN-10: 3540790322 ISBN-13: Price: 12,36</span>
Item: 130770055662 ISBN-10: 3642302637 ISBN-13: Price: 12,36</span>
Item: 130770055662 ISBN-10: B00AP:rofl:38 ISBN-13: Price: 12,36</span>
Item: 130770055662 ISBN-10: 3540662308 ISBN-13: Price: 12,36</span>
Item: 130770055662 ISBN-10: 3642125832 ISBN-13: Price: 12,36</span>
Item: 130770055662 ISBN-10: 3642255264 ISBN-13: Price: 12,36</span>
Item: 130770055662 ISBN-10: 3642301495 ISBN-13: Price: 12,36</span>

Программа должна считывать всё между ISBN-10 до ISBN-13. Разумеется без пробелов

PS
Да кстати было бы суппер если бы показали, как выглядела бы эта строка в
Код:
StringRegExp($data, '(?m)^Item:([A-Za-z0-9\s]*)ISBN-10:([A-Za-z0-9\s]*)ISBN-13:([A-Za-z0-9\s]*)Price:.*$', 4)
в PHP
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Но при открытии через Autoit он видит только первые 2500 строк.

То есть не проходит уже
Код:
$data = FileRead(@ScriptDir & '/item-ISBN-Preis1.3.txt')
FileWrite(@ScriptDir & '/item-ISBN-Preis1.3c.txt',$data)


и файл item-ISBN-Preis1.3c.txt содержит 2500 строк?
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
и файл item-ISBN-Preis1.3c.txt содержит 2500 строк?


Нет. Конечный файл записи меньше чем Исходник
Но аутоит видит только первые 2500. И Само круглое число выглядит как какое то ограничение

Код:
#include <IE.au3> 
#include <Debug.au3>

const $RETRY_CNT = 30
const $blankURL = 'http://www.amazon.de/gp/product/'

func FindCost(ByRef $oIE, $URL = '')
  _IENavigate ($oIE, $URL)

  $retry = 0
  
  while $retry < $RETRY_CNT
    sleep(1)
    
    if IsObj($oIE.document.body) then
      return StringRegExp($oIE.document.body.innerText,  'Preis:\s*EUR\s*\d+,\d+', 0)
    endif
    
    $retry += 1
  wend
  
  _DebugReport('SKIPPED BY TIMEOUT: ' & $url)
  
  return false
endfunc

  _DebugSetup(Default, True)

$data = FileRead(@ScriptDir & '/item-ISBN-Preis1.3.txt')
$items = StringRegExp($data, '(?m)^Item:([A-Za-z0-9\s]*)ISBN-10:([A-Za-z0-9\s]*)ISBN-13:([A-Za-z0-9\s]*)Price:.*$', 4)

const $last = UBound($items) - 1

$found = 0
$skiped = 0
  
  _DebugReport('Records matched: ' & ($last+1))

$oIE = _IECreate ('about:blank', 0, 1, 1)

for $i=0 to $last
  $item = $items[$i]

  _DebugReport(@CRLF & @CRLF & 'Trying item: ' & StringStripWS($item[1], 8) & ', record num: ' & $i)

  $ISDN = StringStripWS($item[2], 8)
    
  if not $ISDN then
    continueloop
  endif
  
  _DebugReport('    ISDN: ' & $ISDN)
  
  $URL = $blankURL & $ISDN

  if FindCost($oIE, $URL) then
    $item[0] = StringStripCR($item[0])
    _DebugReport('Written: ' & $URL & '[funcReturn]' & FileWriteLine(@ScriptDir & '/found.txt', $item[0]))
	
    $found += 1
  endif
  
next

msgbox(0, 'Result', ' Found records: ' & $found & @CRLF & ' From: ' & ($last+1) & @CRLF & ' Skiped by timeout: ' & $found)


Может Дело в _DebugReport ???
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Dk Вы посчитайте кол-во символов в ваших 2500, может там их ~32767 и по этому операции с более чем 2500(ваших) строк не возможны
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
2 Dk
Попробуйте сначало открыть файл через:
Код:
FileOpen

Возможно это исправит ошибку.

Если же это не поможет - думаю не составит особого труда переписать скрипт, чтобы читал построчно
Код:
FileReadLine


ЗЫ: в скрипте все равно есть регулярное выражение с меткой конца строки...
ЗЫЫ: у меня файл читает в 65000 строк
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
считывать всё между ISBN-10 до ISBN-13. Разумеется без пробелов
Код:
$aISBN_10 = StringRegExp('Item:   130770055662   ISBN-10:   B00APXDD38   ISBN-13:   Price:   12,36</span>','[\d|\w]+\s+(?=ISBN-13)', 1)
ConsoleWrite(StringStripWS($aISBN_10[0], 2) & @CR)
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
На счёт ограничений:
http://www.autoitscript.com/forum/topic/143295-filereadline-can-you-read-second-last-line/?p=1009480
 
Верх