Что нового

Расчет из данных текстового файла

maes_tro

Новичок
Сообщения
38
Репутация
0
Доброго времени суток!
Решил заморочится над одной задачкой, а именно расчет квадратуры из данных текстового файла . Есть текстовый файлик с таким содержанием, в котором 3 и 4 столбец длина и ширина. Как сделать так чтобы скрипт смог взять несколько текстовых файлов с таким содержанием, и перемножить 3 и 4 столбец каждой строки, а по завершению вывести итог ?
[info]
2;2;716;387;3;;Ольвия;;R2;;
2;3;716;397;2;;Ольвия;;R2;;
2;4;140;597;1;;Ольвия;;R2;;
2;5;530;597;1;;Ольвия;;R2;;
2;6;356;817;4;;Ольвия;;R2;;[/info]

Вот примерно что , то начал мудрить, подскажите хоть как дальше двигаться
Код:
Opt("TrayIconHide", 0)
Opt("TrayIconDebug", 1)

$zaglav="Счетчик - калькулятор"

$filename=FileOpenDialog($zaglav,"E:\Экспорт","TXT (*.txt)",1+4)
	
	If @error Then
		MsgBox(4096,"","The End")
	Else
		$line=StringSplit($line,";")
	
        EndIf
 

Вложения

  • текстовый файл.txt
    176 байт · Просмотры: 7

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Re: Расчет квадратуры из данных текстового файла

У Вас есть переменная "$line", которая берётся ниоткуда . Лучше прочитать файл в массив , а дальше уже работать с массивом , например так :
Код:
#include <array.au3>

Opt("TrayIconHide", 0)
Opt("TrayIconDebug", 1)

$zaglav = "Счетчик - калькулятор"

$filename = FileOpenDialog($zaglav, @ScriptDir, "TXT (*.txt)", 1 + 4)

If @error Then
	MsgBox(4096, "", "The End")
Else
	$aFile = FileReadToArray($filename)
	Dim $aResult[UBound($aFile)]
	For $i = 0 To UBound($aFile) - 1
		If StringStripWS($aFile[$i], 8) Then;Исключаем пустые строки
			$aLine = StringSplit($aFile[$i], ';')
			$aResult[$i] = $aLine[3] * $aLine[4]
		EndIf
	Next
	_ArrayDisplay($aResult)
EndIf
 
Автор
M

maes_tro

Новичок
Сообщения
38
Репутация
0
Re: Расчет квадратуры из данных текстового файла

ra4o сказал(а):
У Вас есть переменная "$line", которая берётся ниоткуда . Лучше прочитать файл в массив , а дальше уже работать с массивом , например так :
Код:
#include <array.au3>

Opt("TrayIconHide", 0)
Opt("TrayIconDebug", 1)

$zaglav = "Счетчик - калькулятор"

$filename = FileOpenDialog($zaglav, @ScriptDir, "TXT (*.txt)", 1 + 4)

If @error Then
	MsgBox(4096, "", "The End")
Else
	$aFile = FileReadToArray($filename)
	Dim $aResult[UBound($aFile)]
	For $i = 0 To UBound($aFile) - 1
		If StringStripWS($aFile[$i], 8) Then;Исключаем пустые строки
			$aLine = StringSplit($aFile[$i], ';')
			$aResult[$i] = $aLine[3] * $aLine[4]
		EndIf
	Next
	_ArrayDisplay($aResult)
EndIf

Супер ! Вот только у меня окно с ошибкой появляетя (см вложени) после того как открываю текстовый файл
 

Вложения

  • 700.PNG
    700.PNG
    143 КБ · Просмотры: 8

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Есть в самом начале скрипта строка "#include <array.au3>" ?
 
Автор
M

maes_tro

Новичок
Сообщения
38
Репутация
0

Вложения

  • 8.JPG
    8.JPG
    36.4 КБ · Просмотры: 5
  • 11.JPG
    11.JPG
    31.9 КБ · Просмотры: 6

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Какая у Вас версия AutoIt ?
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
:stars: это сколько лет не обновлялись ? Обновите AutoIt !
Да, и пример этот будет работать, если выбран только один файл , при выборе нескольких - нужно дописать
Вот , можно и один и несколько файлов выбирать :
Код:
#include <array.au3>

Opt("TrayIconHide", 0)
Opt("TrayIconDebug", 1)

$zaglav = "Счетчик - калькулятор"

$filename = FileOpenDialog($zaglav, @ScriptDir, "TXT (*.txt)", 1 + 4)
Global $n = 0
Dim $aResult[0]

If @error Then
	MsgBox(4096, "", "The End")
Else
	If StringInStr($filename, '|') Then;если выбрано несколько файлов
		$aListFile = StringSplit($filename, '|')
		$Folder = $aListFile[1]
		For $i = 2 To $aListFile[0]
			$sFullPath = $Folder & '\' & $aListFile[$i]
			_Count($sFullPath)
		Next
	Else ;если выбран один файл
		_Count($filename)
	EndIf


	_ArrayDisplay($aResult)
EndIf

Func _Count($Path)

	$aFile = FileReadToArray($Path)

	For $i = 0 To UBound($aFile) - 1
		If StringStripWS($aFile[$i], 8) Then;Исключаем пустые строки
			$n += 1
			ReDim $aResult[$n]
			$aLine = StringSplit($aFile[$i], ';')
			$aResult[$n - 1] = $aLine[3] * $aLine[4]
		EndIf
	Next

EndFunc   ;==>_Count
 
Автор
M

maes_tro

Новичок
Сообщения
38
Репутация
0
ra4o сказал(а):
:stars: это сколько лет не обновлялись ? Обновите AutoIt !
Да, и пример этот будет работать, если выбран только один файл , при выборе нескольких - нужно дописать
.
Да уж старею)) время летит быстро... но что то опять не хочет после обновления
 

Вложения

  • 16.JPG
    16.JPG
    24.7 КБ · Просмотры: 7

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Вы его не компилируйте, просто из SciTe запустите , SciTe внизу ,в консоли на какую функцию ругается ? Очень интересно... скрипт элементарный, всего две функции ...
P.S. Скрипт, работающий с выбором нескольких файлов выложил в предыдущем сообщении
 
Автор
M

maes_tro

Новичок
Сообщения
38
Репутация
0
ra4o сказал(а):
Вы его не компилируйте, просто из SciTe запустите , SciTe внизу ,в консоли на какую функцию ругается ? Очень интересно... скрипт элементарный, всего две функции ...
P.S. Скрипт, работающий с выбором нескольких файлов выложил в предыдущем сообщении
 

Вложения

  • консоль.JPG
    консоль.JPG
    88.6 КБ · Просмотры: 9

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Как то Вы не обновились нормально, функция "_ArrayDisplay" есть в стандартной библиотеке "array.au3". Сейчас какая версия AutoIt ? (Пишет в верху заготовки со скриптом, например так : "AutoIt Version: 3.3.14.2")
 
Автор
M

maes_tro

Новичок
Сообщения
38
Репутация
0
ra4o сказал(а):
Как то Вы не обновились нормально, функция "_ArrayDisplay" есть в стандартной библиотеке "array.au3". Сейчас какая версия AutoIt ? (Пишет в верху заготовки со скриптом, например так : "AutoIt Version: 3.3.14.2")
Работает! Спасибо огромное!
Хотел спросить на дорожку ) , можно сделать еще одну колонку , чтоб выдавало результат перемноженного 3 и 4 столбца, но только для определенного рисунка (например только для "Чертеж" из седьмой колонки)??
[box title=TitleBox]
2;2;716;387;3;;Ольвия;;R2;;
2;3;716;397;2;;Ольвия;;R2;;
2;4;140;597;1;;Чертеж ;;R2;;
2;5;530;597;1;;Ольвия;;R2;;
2;6;356;817;4;;Чертеж ;;R2;;[/box]
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Можно, вот:
Код:
#include <array.au3>

Opt("TrayIconHide", 0)
Opt("TrayIconDebug", 1)

$zaglav = "Счетчик - калькулятор"


$filename = FileOpenDialog($zaglav, @ScriptDir, "TXT (*.txt)", 1 + 4)
Global $Drawing = 'Чертеж' ;Рисунок из 7 колонки по которому выполнять поиск
Global $n = 0
Dim $aResult[0]

If @error Then
	MsgBox(4096, "", "The End")
Else
	If StringInStr($filename, '|') Then;если выбрано несколько файлов
		$aListFile = StringSplit($filename, '|')
		$Folder = $aListFile[1]
		For $i = 2 To $aListFile[0]
			$sFullPath = $Folder & '\' & $aListFile[$i]
			_Count($sFullPath)
		Next
	Else ;если выбран один файл
		_Count($filename)
	EndIf


	_ArrayDisplay($aResult)
EndIf

Func _Count($Path)

	$aFile = FileReadToArray($Path)

	For $i = 0 To UBound($aFile) - 1
		If StringStripWS($aFile[$i], 8) Then;Исключаем пустые строки
			$aLine = StringSplit($aFile[$i], ';')
			If $aLine[7] = $Drawing Then;Выбор только по заданному рисунку
				$n += 1
				ReDim $aResult[$n]
				$aResult[$n - 1] = $aLine[3] * $aLine[4]
			EndIf
		EndIf
	Next

EndFunc   ;==>_Count
 
Автор
M

maes_tro

Новичок
Сообщения
38
Репутация
0
ra4o сказал(а):
Можно, вот:
Код:
#include <array.au3>

Opt("TrayIconHide", 0)
Opt("TrayIconDebug", 1)

$zaglav = "Счетчик - калькулятор"


$filename = FileOpenDialog($zaglav, @ScriptDir, "TXT (*.txt)", 1 + 4)
Global $Drawing = 'Чертеж' ;Рисунок из 7 колонки по которому выполнять поиск
Global $n = 0
Dim $aResult[0]

If @error Then
	MsgBox(4096, "", "The End")
Else
	If StringInStr($filename, '|') Then;если выбрано несколько файлов
		$aListFile = StringSplit($filename, '|')
		$Folder = $aListFile[1]
		For $i = 2 To $aListFile[0]
			$sFullPath = $Folder & '\' & $aListFile[$i]
			_Count($sFullPath)
		Next
	Else ;если выбран один файл
		_Count($filename)
	EndIf


	_ArrayDisplay($aResult)
EndIf

Func _Count($Path)

	$aFile = FileReadToArray($Path)

	For $i = 0 To UBound($aFile) - 1
		If StringStripWS($aFile[$i], 8) Then;Исключаем пустые строки
			$aLine = StringSplit($aFile[$i], ';')
			If $aLine[7] = $Drawing Then;Выбор только по заданному рисунку
				$n += 1
				ReDim $aResult[$n]
				$aResult[$n - 1] = $aLine[3] * $aLine[4]
			EndIf
		EndIf
	Next

EndFunc   ;==>_Count
 
Верх