Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как прочитать из текстового файла нужную строку? 
V
    Опции темы
Валк
Дата 4.8.2008, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 25.5.2006

Репутация: нет
Всего: нет



Есть текстовый файл, нужно прочитать первую строку, сделать с ней кое-какие операции, затем прочитать следующую.

Какой командой можно прочитать, допустим, строку с определённым номером?
Я бы завёл тогда переменную, которой присвоил бы значение равное тексту этой строки и уже делал с ней нужные мне операции.

Это сообщение отредактировал(а) Валк - 4.8.2008, 20:38
PM MAIL WWW   Вверх
Akina
Дата 4.8.2008, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Первый вопрос - что мешает прочитать весь файл, отпарсить в массив (элемент = строка) и работать с ним?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Валк
Дата 4.8.2008, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 25.5.2006

Репутация: нет
Всего: нет



Боюсь, что массив будет очень большой + я не знаю как и это делать.

Пока дошёл до такого варианта:
Код

Dim fso_FileStats As New FileSystemObject
Dim ts_FileStats As TextStream
v_FileStats = TextBoxStats.Value    'Тут у меня форма есть, где в текстовом поле задаётся файл и путь к нему
Set ts_FileStats = fso_FileStats.OpenTextFile(v_FileStats, ForReading, False)
Do While Not ts_FileStats.AtEndOfStream
    v_LineStats = ts_FileStats.ReadLine
    v_LineStats = Replace(v_LineStats, Chr(34) & Chr(44) & Chr(34), " ", , , vbTextCompare)
    v_LineStats = Mid(v_LineStats, 2, Len(v_LineStats) - 2)
Loop


Издевательства над переменной v_LineStats и есть нужные мне операции.

Пугает то, что пришлось присоединить библиотеку работы с объектами и не уверен, что решение в общем правильное.

Это сообщение отредактировал(а) Валк - 4.8.2008, 22:25
PM MAIL WWW   Вверх
Данкинг
Дата 4.8.2008, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 1
Всего: 130



Не понял, а зачем так сложно? Вроде же есть команды вроде
Код

Open "ld.dat" For Input As #1

?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Валк
Дата 4.8.2008, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 25.5.2006

Репутация: нет
Всего: нет



Данкинг
В твоём коде прочитается только строка номер один?
PM MAIL WWW   Вверх
Akina
Дата 4.8.2008, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



А почему именно ReadLine? есть же ReadFile + Split... или речь о файле в десятки-сотни-более мегабайт?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Валк
Дата 4.8.2008, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 25.5.2006

Репутация: нет
Всего: нет



Akina
Да нет, файлы не такие огромные, думаю не более десяти мегабайт будут, просто что первое в книжке прочитал, то и пишу.

Думаю так и оставлю, благо у меня вроде то, что хотел получилось.

Кроме двух моментов (только не смейтесь).
1. Переменная v_LineStats у меня Variant, я её усекаю до определённого момента при котором она у меня получается вроде как число. Пробую задать условие:
Код

If v_LineStats > TextBoxHands.Value Then

где TextBoxHands.Value тоже вроде как число, а условие никак не выполняется. Точнее игнорируется знак >. К примеру, TextBoxHands.Value у меня почти всегда равно 100, LineStats бывает разным, но хоть оно больше сотни, хоть меньше все команды после
Код

If v_LineStats > TextBoxHands.Value Then

выполняются не взирая. Что делать?
2. Есть у меня второй файл, в котором есть данные. Если из первого файла данные можно читать последовательно, то во втором они разбросаны беспорядочно. Можно как-то в файле данные искать? Например,

Вид первого файла:

"TC113","85","214.36","43.53","12.94","33.33"
"Lerry1982","1,045","16.98","14.83","7.46","63.41"
"sagaraga","2,299","7.64","16.79","9.53","47.78"
"didudidu","908","18.92","11.89","7.38","56.00"

Вид второго файла:

PlayerName=TC113
NoteText="Красное, зелёное и чёрное"

PlayerName=Lerry1982
NoteText="Синий, голубой"

PlayerName=sagaraga
NoteText="Полностью бесцветный"

PlayerName=didudidu
NoteText=

Так вот, как из второго файла взять только то, что после NoteText="??
PM MAIL WWW   Вверх
Данкинг
Дата 4.8.2008, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 1
Всего: 130



Цитата(Валк @ 4.8.2008,  23:51)
Данкинг
В твоём коде прочитается только строка номер один?

Я на VB давным-давно уже ничего не писал.  smile Вот мой код образца 2004 года, нашёл прогу:
Код

Open "ld.dat" For Input As #1
While Not EOF(1)
2 Line Input #1, l$
If l$ = "" Then
GoTo 2
End If
If l$ = Text4.Text Then
MsgBox "Ну что, начнём обкурку, " + l$ + "!!!", vbExclamation, "Я тебя узнал!"
flag = 1
End If
Wend
Close #1


(суть ясна, думаю  smile )


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Akina
Дата 5.8.2008, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(Валк @  5.8.2008,  00:30 Найти цитируемый пост)
она у меня получается вроде как число. Пробую задать условие:
[skipped]
где TextBoxHands.Value тоже вроде как число, а условие никак не выполняется

ТО, что при печати выглядит как число, не обязано быть числом вполне может оказаться строкой. Чтобы получить гарантированно число, следует использовать явно процедуру приведения типов.
Скажем TextBoxHands.Value - явно строка, Val(TextBoxHands.Value) - гарантированно число, но фиг знает какого типа, а вот CDbl(TextBoxHands.Value) - гарантированно число с плавающей точкой двойной точности.

Добавлено через 1 минуту и 36 секунд
Цитата(Валк @  5.8.2008,  00:30 Найти цитируемый пост)
как из второго файла взять только то, что после NoteText="?? 

Напечатать, вырезать ножницами и взять. Скажем, в левую руку... НЕТУ в программировании операции взять! 
Не определено.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Валк
Дата 6.8.2008, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 25.5.2006

Репутация: нет
Всего: нет



Akina
Val(TextBoxHands.Value) - гарантированно число
Спасибо за подсказку.

Напечатать, вырезать ножницами и взять. Скажем, в левую руку... НЕТУ в программировании операции взять! 
Не определено.

Ну что ты, право слово. Я и так понимаю, что я бестолковый.

В общем, как я сделал.
Читал каждую строку и если её первые 9 символов были равны "NoteText=", то при помощи функций обработки строк Left, Right, Mid, Len вырезал нужные мне кусочки текста и вставлял куда надо.

Всем большое спасибо, вопрос кажется решил.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0772 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.