Что нового

Перенос данных из ТХТ в AU3

OXIGEN

Новичок
Сообщения
30
Репутация
0
Всем здравствуйте. Имеется два файла 1.txt и 2.au3
В ТХТ массиве из нескольких сотен строк такого типа:

Slim_position|0|440|297|gu|nicky
Storis_log|0|93|92|gs|yuri9944
Kitch_row|0|1.65|1,643|gr|blackin

В файле au3 массив такого типа

GUICtrlCreateListViewItem("Slim_position|440|0", $ListView)
GUICtrlCreateListViewItem("Storis_log|93|0", $ListView)
GUICtrlCreateListViewItem("Kitch_row|1.650|0", $ListView)

Как можно его привести во в такой вид :

GUICtrlCreateListViewItem("Slim_position|0|440|297|gu|nicky", $ListView)
GUICtrlCreateListViewItem("Storis_log|0|93|92|gs|yuri9944", $ListView)
GUICtrlCreateListViewItem("Kitch_row|0|1.65|1,643|gr|blackin", $ListView)

То есть скопировать из ТХТ всю строку (поиск по первым словам, до разделителя"|")
в найденную в au3 (с таким-же значением) и вставке вместо содержимого в кавычках "".
То есть ищем по значению, допустим Slim_position из ТХТ находим в au3 строку

GUICtrlCreateListViewItem("Slim_position|440|0", $ListView) и вместо

Slim_position|440|0 вставляем Slim_position|0|440|297|gu|nicky в то что в кавычках.

Возможно такое?
 

Norm

Продвинутый
Сообщения
279
Репутация
74
Да, такое точно возможно.
Сообщение автоматически объединено:

Выложите ваши файлы для лучшего понимания задачи.
 
Последнее редактирование:
Автор
O

OXIGEN

Новичок
Сообщения
30
Репутация
0
Хорошо, можно проще.

файл 1.txt -
Маша мыла раму мочалкой

файл 2.txt -
АААААА "Маша мыла раму и недомыла, пошла спать" БББББББ

получить в файле 2.txt
АААААА "Маша мыла раму мочалкой" БББББББ

1. считать из 1.txt часть строки (1-е или 1 и 2 слово) - Маша или Маша мыла
2. найти в 2.txt строку с текстом - Маша или Маша мыла
3. Затереть в 2.txt в найденной строке, ВЕСЬ текст в кавычках - " "
4. Вставить ПОЛНУЮ строку из 1.txt в 2.txt (в место где всё затёрто) в кавычки - "Маша мыла раму мочалкой"
 
Последнее редактирование:

Norm

Продвинутый
Сообщения
279
Репутация
74
Если количество этих строк равно количество в другом файле, то вашу задачу можно решить намного елегантнее, чем банальная замена строк, а именно
Напрямую создавать ListView из прочитанного файла.
 
Автор
O

OXIGEN

Новичок
Сообщения
30
Репутация
0
в файле 1.txt количество строк периодически меняется... Мне бы просто это решить, а с заменой строк нет проблем, скорость не так важна там всего секунды уходят... Просто в 1-м файле значения переменные, во втором постоянные. Всё это должно обработаться и вывести в таблицу.
 
Последнее редактирование:

Norm

Продвинутый
Сообщения
279
Репутация
74
Вот скрипт редактирования другого скрипта
Код:
Local $aInput = StringRegExp(FileRead(@ScriptDir &"\Input.txt"),"\V+",3)
Local $sSuStr, $nN, $sScript = FileRead(@ScriptDir &"\Dat_Autoit.au3")
If IsArray($aInput) Then
    For $nN = 0 To UBound($aInput)-1
        $sSuStr = StringRegExpReplace($aInput[$nN], "^([^\|]+)\|.+", "$1")
        If @extended Then
            $sScript = StringRegExpReplace($sScript, '"('& $sSuStr &'\|.+?)"', '"'& $aInput[$nN] &'"')
        EndIf
    Next
    $nN = FileOpen(@ScriptDir &"\Dat_Autoit_Out.au3", 2+8+128)
    FileWrite($nN, $sScript)
    FileClose($nN)
    MsgBox(0,Default,"End")
EndIf
Я бы весь код сделал примерно так и хранил бы константные стрики тоже отдельно.
Пример текстовых файлов призепил ниже.
Код:
#include <ListViewConstants.au3>
#include <GUIConstantsEx.au3>

Local $hGUI, $ListView, $sSuStr, $nN, $allItms
Local $sConst = FileRead(@ScriptDir &"\Dat_Cons.txt")
Local $aInput = StringRegExp(FileRead(@ScriptDir &"\Input.txt"),"\V+",3)

If IsArray($aInput) Then
    For $nN = 0 To UBound($aInput)-1
        $sSuStr = StringRegExpReplace($aInput[$nN], "^([^\|]+)\|.+", "$1")
        If @extended Then
            $sConst = StringRegExpReplace($sConst, '(?m)(^'& $sSuStr &'\|.+)', $aInput[$nN])
        EndIf
    Next
    $allItms = StringRegExp($sConst, "\V+" ,3)
EndIf

$hGUI = GUICreate("ListView", 540, 460, -1, -1)
GUISetBkColor(0xECE9D8)
$ListView = GUICtrlCreateListView("Колонка1|Колонка2|Колонка3|Колонка4|Колонка5|Колонка6", 10, 10, 520, 440, -1, $LVS_EX_GRIDLINES)
For $nN = 0 To UBound($allItms)-1
    GUICtrlCreateListViewItem($allItms[$nN], $ListView)
Next

GUISetState()

Do

Until GUIGetMsg() = $GUI_EVENT_CLOSE
 

Вложения

  • Dat_Cons.txt
    324 байт · Просмотры: 2
  • Input.txt
    205 байт · Просмотры: 2
Последнее редактирование:
Автор
O

OXIGEN

Новичок
Сообщения
30
Репутация
0
Огромное спасибо! Сегодня попробую оба варианта....
Всё работает! Оба варианта! Чуть подправил и использую второй вариант обходясь одним тхт файлом! Ещё раз огромное спасибо!...
 
Последнее редактирование:
Верх