Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Как прочитать из текстового файла нужную строку?


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

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

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

Автор: Валк 4.8.2008, 22:23
Боюсь, что массив будет очень большой + я не знаю как и это делать.

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

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:27
Не понял, а зачем так сложно? Вроде же есть команды вроде
Код

Open "ld.dat" For Input As #1

?

Автор: Валк 4.8.2008, 22:51
Данкинг
В твоём коде прочитается только строка номер один?

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

Автор: Валк 4.8.2008, 23:30
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="??

Автор: Данкинг 4.8.2008, 23:32
Цитата(Валк @ 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 )

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

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

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

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

Автор: Валк 6.8.2008, 00:02
Akina
Val(TextBoxHands.Value) - гарантированно число
Спасибо за подсказку.

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

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

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

Всем большое спасибо, вопрос кажется решил.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)