Что нового

Как скопировать из файла, с первой строки, некоторое кол-во символов до пробела?

sergeinovilozf

Новичок
Сообщения
51
Репутация
0
Здравствуйте.

В txt файле имеется 2-3 значения разделённых 2-5 пробелами.
Пример: ropy45u yih3kfk fufigi7h

Их нужно последовательно скопировать.
Функция StringLeft() и StringRihgt() здесь не подойдёт,т.к. указывается точное количество символов.
Пока они у меня в 3-х файлах на первой строчке.
Как реализовать в одном???
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
#include <Array.au3>

Local $sText = "ropy45u   yih3kfk   fufigi7h"
MsgBox(0, "Вариант 1", StringMid($sText, 1, StringInStr($sText, " ") - 1))
MsgBox(0, "Вариант 2", StringRegExp($sText, "^(.*?) ", 1)[0])
_ArrayDisplay(StringSplit(StringStripWS($sText, 1 + 2 + 4), " "), "Вариант 3")
 
Автор
S

sergeinovilozf

Новичок
Сообщения
51
Репутация
0
Спасибо.Но где-то ошибка,при поиске второго слова.
Код:
#include <Array.au3>
Local $sText = "ropy45u   yih3kfk   fufigi7h"
MsgBox(0, "Вариант 1", StringMid($sText, 1, StringInStr($sText, " ") - 1)); от начала строки до первого совпадения "2 пробела".Показывает первую часть.
MsgBox(0, "Вариант 2", StringRegExp($sText, "^(.*?) ", 1)[0]); здесь выдаёт тоже первую часть
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
sergeinovilozf, в первых двух вариантах пример того как извлечь строку до определенного символа (заголовок темы "Как скопировать из файла, с первой строки, некоторое кол-во символов до пробела"), а третий разбивает строку на массив используя пробел как разделитель для StringSplit. Чем он вам не подошел?


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

Можете использовать StringSplit не удаляя дублирующиеся пробелы (StringStripWS) если это что-то меняет
Код:
#include <Array.au3>
Local $sText = "ropy45u   yih3kfk   fufigi7h"
_ArrayDisplay(StringSplit($sText, " "), "Вариант 4")
 
Автор
S

sergeinovilozf

Новичок
Сообщения
51
Репутация
0
Если не сложно подскажите как второе слово найти?
Код:
#include <Array.au3>
Local $sText = "ropy45u@yih3kfk"
MsgBox(0, "Вариант 1", StringMid($sText, 1, StringInStr($sText, "@") - 1));

Первый вариант проще выглядит.
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
sergeinovilozf, и в чем заключается это проще?
Код:
#include <Array.au3>
Local $sText = "ropy45u@yih3kfk"
MsgBox(0, "", StringMid($sText, StringInStr($sText, "@") + 1))
;
_ArrayDisplay(StringSplit($sText, "@"))


Не знаю ваших целей, но если вы сами записываете/читаете эти строки можете посмотреть
Код:
IniWrite()
IniRead()
 
Автор
S

sergeinovilozf

Новичок
Сообщения
51
Репутация
0
Tempo,спасибо за ответы.
Нашёл то,что хотел:
Код:
$sText = "ropy45u \n yih3kfk \n fufigi7h"
$aArray = StringSplit($sText, '\n', 1)
MsgBox(0, "Вариант 1", StringMid($sText, 1, StringInStr($sText, "\n") - 1));первое значение
MsgBox(4096, "Пример 2",  $aArray[2]);второе значение
MsgBox(4096, "Пример 2",  $aArray[3]);третье значение
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Зачем первое значение извлекать отдельно? И чем не подошло отображение массива через _ArrayDisplay в моих примерах с тем же StringSplit?
Код:
#include <Array.au3>

Local $sText = "ropy45u \n yih3kfk \n fufigi7h"
Local $aArray = StringSplit($sText, '\n', 1)

_ArrayDisplay($aArray)


Может это чем-то вам поможет Массивы
 
Автор
S

sergeinovilozf

Новичок
Сообщения
51
Репутация
0
Мне кажется эта запись $aArray[2] проще выглядит.
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
sergeinovilozf, а причем тут "запись $aArray[2]" если _ArrayDisplay используется лишь для удобного отображения массива, а не для обращения к его ячейкам

Tempo [?]
Зачем первое значение извлекать отдельно?
Код:
Local $sText = "ropy45u \n yih3kfk \n fufigi7h"
Local $aArray = StringSplit($sText, "\n", 1)
MsgBox(0, "", $aArray[1] & @CRLF & $aArray[2] & @CRLF & $aArray[3])
 
Автор
S

sergeinovilozf

Новичок
Сообщения
51
Репутация
0
Пока минимальным набором функций пользуюсь.Поэтому.
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
sergeinovilozf сказал(а):
Tempo,спасибо за ответы.
Нашёл то,что хотел:
Код:
$sText = "ropy45u \n yih3kfk \n fufigi7h"
$aArray = StringSplit($sText, '\n', 1)
MsgBox(0, "Вариант 1", StringMid($sText, 1, StringInStr($sText, "\n") - 1));первое значение
MsgBox(4096, "Пример 2",  $aArray[2]);второе значение
MsgBox(4096, "Пример 2",  $aArray[3]);третье значение

Извлекать первую часть строки отдельно StringMid+StringInStr когда StringSplit возвращает сразу массив из всех частей это излишне, а не "минимальный набор функций"
 
Верх