PDA

Просмотр полной версии : Shell. Чтение текстового файла по строкам.



Delphin911
07.04.2005, 08:42
Подскажите как можно прочитать текстовый файл по строкам и в зависимости от значения строки, делать с ней разные вещи. Ну например, кидать в другой файл, присваивать значение строки переменной ит.д.

Romeo
07.04.2005, 10:24
Всё делается очень просто: либо с помощью функции fgets, которая позволяет читать файл построчно, либо с помощью С++ стримов. Возникает, правда, один вопрос. При чём здесь Shell?

Delphin911
07.04.2005, 10:38
Как при чем? :shock:
Скрипт на shell, точнее даже на bash

Delphin911
07.04.2005, 10:42
И еще, прошу прощения, но я новичек в программировании на shell и никак не могу понять синтаксис этого fgets. Нельзя ли конкретный примерчик. Скажем нужно мне переменной x присвоить значение 20 строки файла test.txt

Alexie D.
08.04.2005, 04:36
Delphin911 ну я так понимаю что fgets считывает файл по строчно....

char *fgets( char *string, int n, FILE *stream );
char *string - переменная куда читать строку из файла
int n - количество символов которые нужно считать из строки
FILE *stream - ну а тут имя файла, и аттрибуты на открытие

//обьявляем переменные....
//для файла
FILE *stream;
//куда читать строку из файла
char line[100],line2[100];
// если файл открыли то начинаем читать из него данные
if( (stream = fopen( "C:\\test.txt", "r" )) != NULL )
{
fgets(line, 1000, stream );
//считали первую строку
fgets(line2, 1000, stream );
//считали вторую строку и т.д.
MessageBox(0, LPSTR(line), "Строка - 1", MB_OK);
//ну а тут можно вывести строку......
MessageBox(0, LPSTR(line2), "Строка - 2", MB_OK);
fclose( stream );
}

Вообще я это взял МСДНа там поэтому поводу очень подробно..... удачи!

AiK
08.04.2005, 12:06
Скрипт на shell, точнее даже на bash

взял МСДНа
Парни, сдаётся мне вы о разных ОСях толкуете. Судя по всему, сей топик заблудился.

Romeo
08.04.2005, 12:31
И у меня такое же ощущение :) Сразу после того, как Delphin911 ответил на вопрос о shell.

Delphin911
12.04.2005, 10:39
Вот так я при помощи друзей решил проблему с чтением файла по строкам и сравнения строки с определенным значением

#!/usr/bin/bash

set -vx

cat /remote/ad/test | while read b
do
x=${b#*: }
if [[ `echo $b | grep dn:` ]]
then
echo $c
c=$x
else
c=$x+$c (здесь пробовал по-разному c=$x$c, c="$x""$c" и т.д.)
fi
done

Но бяда теперь вот в чем. Скажем имеем три строки

1 строка - dn: 1111
2 строка - m: 22222222
3 строка - g: 333333333333

и вот в результате, вместо 333333333333222222221111 получаем вот что 111122223333

Подмогните плиз!