Не могу забить данныев программу (Потому, наверное, что слишком большой объём)

Модератор: Модераторы разделов

Ответить
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Не могу забить данныев программу

Сообщение promov »

А дело вот в чём.
ДРузья! Я написал программу, которая удаляет из текста программы комментарии. И естественно, я к ней тоже написал комментарии. Так-то она тестируется на маленьких примерах типа //rrrrrr. Ну вот, а теперь я хочу убрать из текста этой программы комментарии и не могу. Дело не в работоспособности или неработоспособности моей программы. Дело в том, что я текст её не могу в качестве данных ввести. Я его выделяю, потом копирую, потом "вставить". И вот тут-то и начинается. Он вставляется то не до конца, то частями, например начало и конец. А то ещё вставится часть текста, потом снова кликаю на вставить, тогда другая вставляется. (а потом комментарии удаляются вместе с частью программы- с последними строками 8-ми. Но это уже второй вопрос.) Или напишет что-то типа
i++: command not found
Или ошибки какие-нибудь найдёт. И это при всём при том что я просто вставлял текст а команду на запуск не давал. Может, такие большие тексты нельзя так вводить? Я же фактически в буфер эти данные забиваю, не знаю, может, он у меня переполняется или ещё что-то. Может, нужно не так, а создать файл и пусть из файла считывает? Вы подскажите, если мои предположения верны, буду в этом направлении думать. (Я не пробую сам потому, что я файлы ещё не изучал)

...Просто в качестве информации. Я когда несколько часов назад эту программу тестировал, то всё было без сучка и задоринки, она не то, что из самой себя комментарии удалила, а и из других программ тоже (с 10 штук через неё прогонял, ни одна работоспособности не потеряла. ЭТо я к тому, что вон сколько знаков через буфер прогонял.) Потом я её переделывал- нашёл некотрые случаи, очень редкие, которые для тестирования только и подоходят и которые я в начале не учёл. Вот, всё. Увеличить я её не сильно увеличил- так, процентов 13 от общего объёма знаков добавил. Теперь ни в какую. Не могу данные толком в буфер вставить и всё тут. Я уж не знаю, на что и думать. Если кто с подобным сталкивался, буду благодарен за совет.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Не могу забить данныев программу

Сообщение Liksys »

Что, как и куда. Плюс исходник программы с инструкцией по применению в студию.
Спасибо сказали:
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Re: Не могу забить данныев программу

Сообщение promov »

... Неужели начинается..,
Ну просто копирую и всё. Курсор в левый верхний угол и жму на две кнопки shift и ту стрелку, которая вниз. Или мышью копирую. Потом после ./a.out<Enter> вставляю. Да, я забыл сказать. У меня массив создаётся char s [10000]. Уж всяко-разно в этот массив должен текст программы влезть. У меня программа 183 строчки на 100 столбцов. Это в потенциале 18300 знаков. Но это только в потенциале. Так-то я конечно и с пробелами и с отступами пишу, чтобы самому понятно было. Навскидку если тысяч 7 знаков, может, наберётся... Надо посчитать.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
Аватара пользователя
Atragor
Сообщения: 681
Статус: ...
Контактная информация:

Re: Не могу забить данныев программу

Сообщение Atragor »

А нельзя ли массив динамическим сделать?
If you were MEANT to understand it, we wouldn't have called it 'code' © bash.org
Спасибо сказали:
Аватара пользователя
nrg
Сообщения: 219
Статус: Энерджайзер :)
ОС: OpenSuSe 10.3
Контактная информация:

Re: Не могу забить данныев программу

Сообщение nrg »

"У меня программа 183 строчки на 100 столбцов. Это в потенциале 18300 знаков. Но это только в потенциале. Так-то я конечно и с пробелами и с отступами пишу," - а пробелы, по-вашему полноценными символами не являются места не занимают ?)

Делайте сразу char s[100000], если разрешит компилятор, а он может и не разрешить :)
Как вариант решения проблемы, таки смею предложить читать тексты программы из файла, либо забирать его из STDIN, а сейчас, как я понял, это забирается вообще из аргумента командной строки, если нужны примеры, как это сделать, могу без проблем накидать как на С, так и на С++.
OpenSuSe 10.3 на Dell Inspiron 1501 и Семпрон-3000/1024ДДР2-800/120+60+300/NVidia 8500GT.
Участник Sun Open Source User Group, Самара.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian
Контактная информация:

Re: Не могу забить данныев программу

Сообщение diesel »

promov если я правильно понял ваш поток сознания, проблема со вставкой текста, и программу вы вызываете типа programname <Enter> потом текст Ctrl+D .... т.е. из STDIN'а берутся данные ... т.е. ничего копировать не нужно: cat programname.c | programname - можно вот так, например.
Спасибо сказали:
Аватара пользователя
nrg
Сообщения: 219
Статус: Энерджайзер :)
ОС: OpenSuSe 10.3
Контактная информация:

Re: Не могу забить данныев программу

Сообщение nrg »

А, да... я неверно прочёл, думал все делается как имя программы пробел, интсерт + шифт, моя ошибка :( Но буфер всё равно советую увеличить или перейти к динамическим структурам данных, например двусвязным / односвязным спискам.
OpenSuSe 10.3 на Dell Inspiron 1501 и Семпрон-3000/1024ДДР2-800/120+60+300/NVidia 8500GT.
Участник Sun Open Source User Group, Самара.
Спасибо сказали:
ssh
Сообщения: 78
ОС: Debian

Re: Не могу забить данныев программу

Сообщение ssh »

Да какие еще "динамические структуры"! В данном случае всего-то и надо читать входной файл байт за байтом и выдавать в выходной поток (скажем, с помощью getchar). Как натыкаемся на сочетание "//" - блокируем выдачу до конца строки (а для "/*" - до "*/"). Все это можно сделать скриптом в пять строк.
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Не могу забить данныев программу

Сообщение Liksys »

Исходник в студию!!!
Нет исходника - нет адекватной помощи.
Спасибо сказали:
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Re: Не могу забить данныев программу

Сообщение promov »

Atragor писал(а):
11.01.2008 01:32
А нельзя ли массив динамическим сделать?
Дело не в том, что массива не хватает. Дело в том, что я на экран (читай в буфер) не могу вставить текст размером 10184 знака. Ну или по-другому: char massiv [10184]

ssh писал(а):
11.01.2008 21:12
Да какие еще "динамические структуры"! В данном случае всего-то и надо читать входной файл байт за байтом и выдавать в выходной поток (скажем, с помощью getchar). Как натыкаемся на сочетание "//" - блокируем выдачу до конца строки (а для "/*" - до "*/"). Все это можно сделать скриптом в пять строк.
Сейчас программа не обсуждается. А вообще, Вы не учли, что надо предусмотреть случаи, когда // или /* входят в строковую константу, не забыть, что в строковой константе может встречаться \", не забыть что перед '\n' и */ как перед окончаниями комментариев может встречаться '\'- а это аннулирует окончания- и это тоже нужно предусмотреть в программе... Да много чего ещё. Но это так, между прочим.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Re: Не могу забить данныев программу

Сообщение promov »

nrg писал(а):
11.01.2008 07:53
Как вариант решения проблемы, таки смею предложить читать тексты программы из файла
Во-во, это и надо. Только как?

diesel писал(а):
11.01.2008 09:05
promov если я правильно понял ваш поток сознания, проблема со вставкой текста, и программу вы вызываете типа programname <Enter> потом текст Ctrl+D .... т.е. из STDIN'а берутся данные ... т.е. ничего копировать не нужно: cat programname.c | programname - можно вот так, например.
Cпасибо, конечно, что откликнулись, но... моя программа называется po.c После ./a.out<Enter> пишу cогласно Вашему совету cat po.c|po<ctrl+d> и машина мне выдаёт
cat po.c|po. Эта строчка воспринимается ею как текст программы, в которой нет комментариев...
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian
Контактная информация:

Re: Не могу забить данныев программу

Сообщение diesel »

нет. я имел ввиду вместо ./a.out < ENTER>

т.е. в вашей терминологии: cat po.c|./a.out


вот пример могу показать:

простая програмка, из k&r которая заменяет спецсимволы их кодами:

Код: Выделить всё

diesel@beezir:/home/diesel_debian/KR$ cat vis.c
#include <stdio.h>
#include <ctype.h>

int main(int argc, char *argv[]) {
        int c;
        while (( c = getchar())!=EOF){
                if(isascii(c) &&
                        (isprint(c) || c=='\n' ||  c==' '))
                        putchar(c);
                else
                        printf("\\%03o", c);
        }
}

diesel@beezir:/home/diesel_debian/KR$ gcc vis.c
diesel@beezir:/home/diesel_debian/KR$ cat vis.c |./a.out
#include <stdio.h>
#include <ctype.h>
111111
int main(int argc, char *argv[]) {
11int c;
11while (( c = getchar())!=EOF){
1111if(isascii(c) &&
111111(isprint(c) || c=='\n' ||  c==' '))
111111putchar(c);
1111else
111111printf("\\%03o", c);
11}
}

(результат работы бъется движком форума, но тут это особо не важно)
Спасибо сказали:
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Re: Не могу забить данныев программу

Сообщение promov »

ЗдОрово! Всё получилось, большое спасибо. Я, правда в программе Вашей не разбирался потому, что увидел звёздочки и испугался. Но главное, что я теперь умею считывать файлы. Прогнал программ 20, всё обошлось без сучка и задоринки, комментарии поудалялись, программы работоспособности не потеряли.
А теперь вот можно и попробовать обойтись без громадного массива- он ведь у меня уже есть, это тот файл, где написан исходный текст. И попробовать считывать байт за байтом, как предлагал товарищ. Задача не из лёгких, но если её решить, это будет всяко-разно лучше, чем та программа, что у меня сейчас есть- в ней один только массив чего стоит- 11000 знаков!
Упоминание о cat есть в K&R. Значит, есть откуда черпать информацию. Там посмотрю.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
Ответить