Что нового

[Данные, строки] Парсить из Exel нужные строки

ZanMax

Тестер
Сообщения
120
Репутация
5
Всем привет.
Срочно возникла необходимость парсить из Exek-я нужные строки.
Есть пару десятков файлов по 44 тис. строк.
Парсить нужно такие строки :

Код:
Контракт № 0000000       Номер телефону: 75643221234
Потом идет от 90 до 110 - 120 строк
И снова :
Код:
Загалом за контрактом:,,,001.001
Эти две строчки нужно записать или в новый Exel или в txt файл.
В идеале конечно такой формат Exel :
Номер | Сума |
---------------|---------
74534411223 | 6674.03
74435341213 | 1200.09
71222335599 | 9900.01
-----------------------
и.т.д
Очень прошу помочь. Раньше делал все в ручную. Но когда файлов стало огромное количество это стало просто нереально.
Буду признателен всем за советы, а особенно за примеры.
 

HelpMe

Новичок
Сообщения
85
Репутация
3
В экселе есть множество формул которые помогут тебе... ты опиши проблему по подробней... Я эксель хорошо знаю - могу помочь...
 

vcomp71

Осваивающий
Сообщения
431
Репутация
25
Пример файла приатачь...
 
Автор
Z

ZanMax

Тестер
Сообщения
120
Репутация
5
Извините но я попутал и себя и вас.
Реально этот файл не xls а csv. То есть как я понимаю с ним можно работать как с TxT.
Задача еще упрощается.

Как теперь в нем находить две заветные строки.
Поделитесь примерами.
Спасибо большое.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
ZanMax
и все же подкинь пример файла


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

такой вопрос
почему в файле Номер телефону: 504126405
а должно получится 0504126405
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Вобщем, с номерами разберешься сам, если надо подкрутить, сделал по лобовому
Код:
$sRead = @ScriptDir & '\1.csv'
$hRead = FileOpen($sRead, 0)
$sWrite = @ScriptDir & '\1.txt'
$hWrite = FileOpen($sWrite, 2)
$sRes = 'Номер' & @TAB & 'Сумма' & @CRLF
Do
	$sLine = FileReadLine($hRead)
	$err = @error
	If StringInStr($sLine, 'Контракт №') Then
		$aNum = StringRegExp($sLine, ':\s(\d+)', 1)
		$iNum = $aNum[0]
		Do
			$sLine = FileReadLine($hRead)
		Until StringInStr($sLine, 'Загалом за контрактом:')
		$aSum = StringRegExp($sLine, ',(\d+\.?\d+)', 1)
		$iSum = $aSum[0]
		$sRes &= $iNum & @TAB & $iSum & @CRLF
	EndIf
Until $err = -1
FileWrite($hWrite, $sRes)
FileClose($hWrite)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
ZanMax сказал(а):
Я отпарсил 9 из 10 файлов.
Самый первый не хочет выдает ошибку :
Скрин:
error.jpg


В начале файла идет доп информация.
Может потому ошибка появляется ?
1. в моем скрипте в строке 14 нет операций с массивами. значит ты его модифицировал. как ты хочешь чтобы я узнал в чем ошибка?
2. я дал тебе направление, неплохо бы с твоей стороны, изучить его понять и начать модифицировать под себя, тогда будет четко ясно где ошибка
3. в том файле что ты прислал, есть строка
Код:
Контракт № 5131612
где нет номера телефона. как ты хочешь чтобы она была отпарсена? все что мне приходит в голову это вставлять что-то типа "None" вместо телефона
Код:
$sRead = @ScriptDir & '\1.csv'
$hRead = FileOpen($sRead, 0)
$sWrite = @ScriptDir & '\1.txt'
$hWrite = FileOpen($sWrite, 2)
$sRes = 'Номер' & @TAB & 'Сумма' & @CRLF
Do
	$sLine = FileReadLine($hRead)
	$err = @error
	If StringInStr($sLine, 'Контракт №') Then
		ConsoleWrite($sLine & @CRLF)
		$aNum = StringRegExp($sLine, ':\s(\d+)', 1)
		If IsArray($aNum) Then
			$iNum = $aNum[0]
		Else 
			$iNum = 'None'
		EndIf
		Do
			$sLine = FileReadLine($hRead)
		Until StringInStr($sLine, 'Загалом за контрактом:')
		$aSum = StringRegExp($sLine, ',(\d+\.?\d+)', 1)
		$iSum = $aSum[0]
		$sRes &= $iNum & @TAB & $iSum & @CRLF
	EndIf
Until $err = -1
FileWrite($hWrite, $sRes)
FileClose($hWrite)

если выполнишь п.2 выше, то у тебя не возникнет таких проблем как в п.3
4. зачем ты компилируешь скрипт? хотя это твое дело
5. не шли мне сообщения в пм, я же не тех поддержка. пиши все сюда
 
Верх