Что нового

Разбить строку (с разделителем) в массиве

op_joke

Новичок
Сообщения
20
Репутация
0
Здравствуйте!
После отпуска мозг пообмяк, поэтому прошу помощи у тех кто не отдыхал или не отдыхает в принципе =)
Есть папка, в папке есть текстовые файлы

пример:
1.Иванов_Иван_Иванович_1987.txt
2.Сидоров_Сидор_Сидорович_1961.txt
3.Петров_Петр_Петрович_1981.txt
4.Михайлов_Михаил_Михайлович.txt
n+1.Алексеев_Алексей_Алексеевич_1973.txt

Я эту папку считываю в массив, а задача в массиве - разделить список по разделителям в разные массивы и убрать ".txt", разделителей в виде "_" всегда точно - два, но большинство с тремя.
А дальше это все нужно обработать, но это я уже и сам смогу.
Подскажите возможные варианты, спасибо
 

Kasper

Знающий
Сообщения
70
Репутация
8
Как-то так:(Вариант если нету 1. 2. и т.д. в начале)
Код:
#include <Array.au3>



Dim $array[6]

$array[0] = '5'
$array[1] = 'Иванов_Иван_Иванович_1987.txt'
$array[2] = 'Сидоров_Сидор_Сидорович_1961.txt'
$array[3] = 'Петров_Петр_Петрович_1981.txt'
$array[4] = 'Михайлов_Михаил_Михайлович_1964.txt'
$array[5] = 'Алексеев_Алексей_Алексеевич_1973.txt'

For $i = 1 To $array[0]
	$string = StringSplit(StringMid($array[$i],1,StringLen($array[$i])-4),'_')
	ConsoleWrite($i&'.  '&@CRLF)
	ConsoleWrite('  Имя:'&$string[1]&@CRLF)
	ConsoleWrite('  Фамилия:'&$string[2]&@CRLF)
	ConsoleWrite('  Отчество:'&$string[3]&@CRLF)
	ConsoleWrite('  Год рождения:'&$string[4]&@CRLF)
Next



Если есть 1. 2. и т.д.
Код:
#include <Array.au3>



Dim $array[6]

$array[0] = '5'
$array[1] = '1.Иванов_Иван_Иванович_1987.txt'
$array[2] = '2.Сидоров_Сидор_Сидорович_1961.txt'
$array[3] = '3.Петров_Петр_Петрович_1981.txt'
$array[4] = '4.Михайлов_Михаил_Михайлович_1964.txt'
$array[5] = '5.Алексеев_Алексей_Алексеевич_1973.txt'

For $i = 1 To $array[0]
	$string = StringSplit(StringMid($array[$i],1,StringLen($array[$i])-4),'.')
	$string1 = StringSplit($string[2],'_')
	ConsoleWrite($i&'.  '&@CRLF)
	ConsoleWrite('  Имя:'&$string1[1]&@CRLF)
	ConsoleWrite('  Фамилия:'&$string1[2]&@CRLF)
	ConsoleWrite('  Отчество:'&$string1[3]&@CRLF)
	ConsoleWrite('  Год рождения:'&$string1[4]&@CRLF)
Next


Ответ:
Код:
1.  
  Имя:Иванов
  Фамилия:Иван
  Отчество:Иванович
  Год рождения:1987
2.  
  Имя:Сидоров
  Фамилия:Сидор
  Отчество:Сидорович
  Год рождения:1961
3.  
  Имя:Петров
  Фамилия:Петр
  Отчество:Петрович
  Год рождения:1981
4.  
  Имя:Михайлов
  Фамилия:Михаил
  Отчество:Михайлович
  Год рождения:1964
5.  
  Имя:Алексеев
  Фамилия:Алексей
  Отчество:Алексеевич
  Год рождения:1973
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
op_joke,
если Вы к своему примеру добавите как для него должен выглядеть результат, то легче будет понять чего же Вы хотите.
 
Автор
O

op_joke

Новичок
Сообщения
20
Репутация
0
Kasper сказал(а):
Как-то так:(Вариант если нету 1. 2. и т.д. в начале)
Код:
#include <Array.au3>



Dim $array[6]

$array[0] = '5'
$array[1] = 'Иванов_Иван_Иванович_1987.txt'
$array[2] = 'Сидоров_Сидор_Сидорович_1961.txt'
$array[3] = 'Петров_Петр_Петрович_1981.txt'
$array[4] = 'Михайлов_Михаил_Михайлович_1964.txt'
$array[5] = 'Алексеев_Алексей_Алексеевич_1973.txt'

For $i = 1 To $array[0]
	$string = StringSplit(StringMid($array[$i],1,StringLen($array[$i])-4),'_')
	ConsoleWrite($i&'.  '&@CRLF)
	ConsoleWrite('  Имя:'&$string[1]&@CRLF)
	ConsoleWrite('  Фамилия:'&$string[2]&@CRLF)
	ConsoleWrite('  Отчество:'&$string[3]&@CRLF)
	ConsoleWrite('  Год рождения:'&$string[4]&@CRLF)
Next

Ответ:
Код:
1.  
  Имя:Иванов
  Фамилия:Иван
  Отчество:Иванович
  Год рождения:1987
2.  
  Имя:Сидоров
  Фамилия:Сидор
  Отчество:Сидорович
  Год рождения:1961
3.  
  Имя:Петров
  Фамилия:Петр
  Отчество:Петрович
  Год рождения:1981
4.  
  Имя:Михайлов
  Фамилия:Михаил
  Отчество:Михайлович
  Год рождения:1964
5.  
  Имя:Алексеев
  Фамилия:Алексей
  Отчество:Алексеевич
  Год рождения:1973

Если есть 1. 2. и т.д.
Код:
#include <Array.au3>



Dim $array[6]

$array[0] = '5'
$array[1] = '1.Иванов_Иван_Иванович_1987.txt'
$array[2] = '2.Сидоров_Сидор_Сидорович_1961.txt'
$array[3] = '3.Петров_Петр_Петрович_1981.txt'
$array[4] = '4.Михайлов_Михаил_Михайлович_1964.txt'
$array[5] = '5.Алексеев_Алексей_Алексеевич_1973.txt'

For $i = 1 To $array[0]
	$string = StringSplit(StringMid($array[$i],1,StringLen($array[$i])-4),'.')
	$string1 = StringSplit($string[2],'_')
	ConsoleWrite($i&'.  '&@CRLF)
	ConsoleWrite('  Имя:'&$string1[1]&@CRLF)
	ConsoleWrite('  Фамилия:'&$string1[2]&@CRLF)
	ConsoleWrite('  Отчество:'&$string1[3]&@CRLF)
	ConsoleWrite('  Год рождения:'&$string1[4]&@CRLF)
Next

Нет, друг, не то
Должен получится массив из фамилий (Имен, Отчеств и годов рождения(если таковые имеются)):
Иванов
Сидоров
Петров
Михайлов
Алексеев

Что бы потом всё это дело запихнуть в 2D массив и уже его обработать.
Тут нужно что-то с регулярными, вот сейчас сижу - пробую


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

C2H5OH сказал(а):
op_joke,
если Вы к своему примеру добавите как для него должен выглядеть результат, то легче будет понять чего же Вы хотите.
Легко, прикрепил. Это то, что я соберу в самом конце. А сейчас мне нужно получить массивы фамилий, имен, отчеств
 

Вложения

  • пример.JPG
    пример.JPG
    19.8 КБ · Просмотры: 6

Kasper

Знающий
Сообщения
70
Репутация
8
Код:
#include <Array.au3>



Dim $array[6], $name[6], $surname[6], $middle[6], $ful[6], $year[6]

$array[0] = '5'
$array[1] = '1.Иванов_Иван_Иванович_1987.txt'
$array[2] = '2.Сидоров_Сидор_Сидорович_1961.txt'
$array[3] = '3.Петров_Петр_Петрович_1981.txt'
$array[4] = '4.Михайлов_Михаил_Михайлович_1964.txt'
$array[5] = '5.Алексеев_Алексей_Алексеевич_1973.txt'

For $i = 1 To $array[0]
	$string = StringSplit(StringMid($array[$i],1,StringLen($array[$i])-4),'.')
	$string1 = StringSplit($string[2],'_')
	$name[$i] = $string1[1]
	$surname[$i] = $string1[2]
	$middle[$i] = $string1[3]
	$ful[$i] = $string1[1]&' '&$string1[2]&' '&$string1[3]
	If UBound($string1) = 4 Then
	$year[$i] = ''
	Else
	$year[$i] = $string1[4]
	EndIf
Next
$name[0] = $i-1
$surname[0] = $i-1
$middle[0] = $i-1
$ful[0] = $i-1
$year[0] = $i-1
_ArrayDisplay($name,'Имена')
_ArrayDisplay($surname,'Фамилии')
_ArrayDisplay($middle,'Отчества')
_ArrayDisplay($ful,'ФИО')
_ArrayDisplay($year,'Год рождения')
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Та что ж вы играетесь с примером в тепличных условиях?!
Я так понимаю что отчества может и не быть (или чего там третьего может не быть?).
op_joke, Вы приведите пример с таким случаем и как он должен отобразиться в результате.


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

ааа, увидел. ;D
года рождения может не быть.
а отчество всегда есть?
 
Автор
O

op_joke

Новичок
Сообщения
20
Репутация
0
C2H5OH сказал(а):
Та что ж вы играетесь с примером в тепличных условиях?!
Я так понимаю что отчества может и не быть (или чего там третьего может не быть?).
op_joke, Вы приведите пример с таким случаем и как он должен отобразиться в результате.
Я всегда стараюсь отобразить самый кривой случай, вот и прикрепил картинку с конечным результатом, ФИО есть всегда, не бывает только года, вот у Kasper, вполне рабочий скрипт вышел, только с годом неувязка.

Kasper, спасибо
 

Kasper

Знающий
Сообщения
70
Репутация
8
Я немного подправил код.
Если года рождения нету то он не выдает ошибку
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Модератор.
 
Верх