Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 15.11.2016
Сообщений: 2

Как добавить в массив строк новый элемент?

15.09.2017, 15:04. Показов 5910. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Помогите, пожалуйста, исправить скрит.
Задача считать файлs с флешки и найти в каждом строку начинающуюся с "30414".
Каждое значение занести в массив.
Проблема в том, что массив в итоге становится одной строкой из пяти элементов.
Пробовал массив объявлять и как
$my30414 = @()
и с помощью .NET.

Вывод нижеприведенного кода следующий (получается одна срока из 5 значений и одна итерация в проверочном цикле в конце)

end_Of_script
3041481060000000000330414810138000000002 3041481090000000000130414810138000000002 30414810600000000003
Counter value 1
3041481060000000000330414810138000000002 3041481090000000000130414810138000000002 30414810600000000003
End 1


PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
CLS
$my30414 = @()
$DriveList = Get-WmiObject Win32_logicaldisk -filter "DriveType = '2'"
If ($DriveList -eq $NULL) 
{ 
    write-host "No flash drives"
    break 
}  
Else
{    
#if just 1 flash drive found 
    If ($DriveList[-1] -eq $NULL)
    {
        $myFiles = @(get-childitem -Path $DriveList.DeviceID -Filter *.txt | Where {!$_.PSIsContainer})
        If ($myFiles -ne $NULL)
        {
            $i = 0
            ForEach ($myFile in $myFIles)
            {
                $myPath = Join-Path -Path $DriveList.DeviceId -ChildPath $myFile
                                                
                $myRaw = Select-String -Path $myPath -Pattern "30414"
                $my30414 += $myRaw.SubString($myRaw.IndexOf("=")+1, 20)
 
                $i += 1                
            }
        }        
    }
#if more than 1 flash drive found   
    Else
    {}
    write-host "end_Of_script"  
    write-host $my30414
 
    $i=0
    ForEach ($oneAc in $my30414)
    { 
    $i += 1
    write-host "Counter value", $i
    write-host $oneAc 
    }
    write-host "End ", $i
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.09.2017, 15:04
Ответы с готовыми решениями:

Как передвигать указатель чтобы выделить память под новый элемент и добавить новый элемент в массив?
Допустим есть некое условие,нам нужно при каждом его выполнении выделить память под новый элемент и добавить его в массив. Вопрос:Как...

Как добавить новый элемент в массив структур
Есть такая проблема ! Если вот есть структура Struct Item { int key; char *Info; }; это структура элемента просматриваемой...

Как добавить новый элемент в динамический массив
Вопрос есть ли такая функция которая добавляет в конец массива(динамического) новый элемент. К примеру есть два массива, в один я...

3
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
15.09.2017, 15:41
Цитата Сообщение от microdin Посмотреть сообщение
Задача считать файлs с флешки и найти в каждом строку начинающуюся с "30414".
Каждое значение занести в массив.
Кликните здесь для просмотра всего текста
numbers.txt
00056454304190006547
56784325870423568943
30414810600000000003
43041447770009888000
75688969785433799909
30414810138000000002
30414810900000000001
47767304100008765890
30414810138000000002
89323304120989667584
34534656834500000007
30414810600000000003


PowerShell
1
2
$my30414 = (Select-String -Pattern '^3041' C:\Temp\numbers.txt).Line
$my30414
30414810600000000003
30414810138000000002
30414810900000000001
30414810138000000002
30414810600000000003
0
0 / 0 / 0
Регистрация: 15.11.2016
Сообщений: 2
15.09.2017, 19:40  [ТС]
Большое спасибо за совет.
Но как все-таки запихнуть все найденные значения в один массив?

В вашем случае меняется значение переменной на каждое найденное значение, если я правильно понял.

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

PS E:\download> .\state_sort.ps1
�������������=30414810900000000001������ �������=30414810138000000002������������ �=30414810600000000003
PS E:\download>

Содержимое файлов примерно следующее
датаначала=08.09.2017
датаконца=08.09.2017
расчетныйсчет=30414810600000000003
Миниатюры
Как добавить в массив строк новый элемент?  
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
15.09.2017, 21:22
Лучший ответ Сообщение было отмечено microdin как решение

Решение

Цитата Сообщение от microdin Посмотреть сообщение
Большое спасибо за совет.
Но как все-таки запихнуть все найденные значения в один массив?
В вашем случае меняется значение переменной на каждое найденное значение, если я правильно понял.
Не понял... Я вам показал файл из 12 строчек и команду, которая по заданному шаблону все найдёт строчки (5 штук)
и сразу добавит в заданную переменную. Каждая строчка будет отделена от остальных.

Добавлено через 18 минут
Если надо искать в нескольких файлах и все результаты сохранить в одну переменную, тогда так:

Создал 5 файлов numbers[1-5].txt
Кликните здесь для просмотра всего текста

numbers1.txt

расчетныйсчет=00056454304190006547
расчетныйсчет=56784325870423568943
расчетныйсчет=30414810600000000003 file#1
расчетныйсчет=43041447770009888000
расчетныйсчет=75688969785433799909
расчетныйсчет=30414810138000000002
расчетныйсчет=30414810900000000001
расчетныйсчет=47767304100008765890
расчетныйсчет=30414810138000000002
расчетныйсчет=89323304120989667584
расчетныйсчет=34534656834500000007
расчетныйсчет=30414810600000000003


PowerShell
1
2
$my30414 = (ls C:\Temp\numbers*.txt | Select-String -Pattern '=3041' -Encoding default).Line
$my30414
Вот результат:
Кликните здесь для просмотра всего текста
расчетныйсчет=30414810600000000003 file#1
расчетныйсчет=30414810138000000002
расчетныйсчет=30414810900000000001
расчетныйсчет=30414810138000000002
расчетныйсчет=30414810600000000003
расчетныйсчет=30414810600000000003 file#2
расчетныйсчет=30414810138000000002
расчетныйсчет=30414810900000000001
расчетныйсчет=30414810138000000002
расчетныйсчет=30414810600000000003
расчетныйсчет=30414810600000000003 file#3
расчетныйсчет=30414810138000000002
расчетныйсчет=30414810900000000001
расчетныйсчет=30414810138000000002
расчетныйсчет=30414810600000000003
расчетныйсчет=30414810600000000003 file#4
расчетныйсчет=30414810138000000002
расчетныйсчет=30414810900000000001
расчетныйсчет=30414810138000000002
расчетныйсчет=30414810600000000003
расчетныйсчет=30414810600000000003 file#5
расчетныйсчет=30414810138000000002
расчетныйсчет=30414810900000000001
расчетныйсчет=30414810138000000002
расчетныйсчет=30414810600000000003


Добавлено через 21 минуту
+ попробуйте немного переделанный ваш скрипт (для любого количества подключенных флэшек):

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cls
$my30414 = $null
If ($DriveList = Get-WmiObject Win32_logicaldisk -filter "DriveType = '2'") 
{    
    foreach ($drive in $DriveList)
    {
        $my30414 += (ls -Path $drive.DeviceID -Filter *.txt -File | Select-String -Pattern "=30414" -Encoding default).Line
    }
    
    $my30414
    Write-Host "Найдено:" $my30414.Count "строчек"
}
else
{ 
    write-host "No flash drives"
    break 
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.09.2017, 21:22
Помогаю со студенческими работами здесь

Добавить новый элемент в массив объектов
Есть следующий массив, как в него добавить новый элемент? var test = ;

Не могу добавить последний элемент в новый динамический массив
Доброго времени суток,мне нужно проверить массив parray1 и записать в parraytemp элементы первого массива без повторения. Подскажите...

Добавить новый элемент в упорядоченный по возрастанию массив не нарушая его порядка
Добавить новый элемент в упорядоченный по возрастанию массив не нарушая его порядка. Добавлено через 23 часа 13 минут можно...

Задан массив. Получить из него новый массив путем деления элементов каждой из строк первого массива на элемент этой строки
Задан массив А. Получить из него новый массив путем деления элементов каждой из строк первого массива на элемент этой строки, стоящий по...

Вставить в массив строк новый элемент, не нарушая алфавитный порядок
Добрый день. Нужно вставить в массив строку не нарушая его алфавитный порядок. Пытался это реализовать, находя индекс, по которому нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru