Аватар для Baratro
4 / 4 / 1
Регистрация: 23.09.2009
Сообщений: 74

Strstr: Возвратить всю строку

18.12.2009, 17:03. Показов 5612. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
С помощью функции strstr ищем подстроку в строках файла. В результате успешного поиска необходимо вернуть не указательна на первую строку, с которого начинается вторая строка, а полностью всё содержание строки! Вопрос в том, как сиё реализовать.. (на данный момент нет идей по сему поводу)..
Заранее благодарю за помощь!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.12.2009, 17:03
Ответы с готовыми решениями:

Получить указатель на строку символов и возвратить длину строки в байтах.
Разработать функцию, которая будет получать указатель на строку символов и возвращать длину строки в байтах. Добавить в форму поле для...

Поместить в Edit всю строку из DbGrid
подскажите пожалуйста, как всю строчку поместить в эдит. как одну ячейку разобрался Edit1->Text =...

Как выделить в событии OnSelectCell всю строку, а не ячейку в StringGrid
Как выделить в событии OnSelectCell всю строку, а не ячейку в StringGrid Например, void __fastcall...

40
 Аватар для Ex_Soft
213 / 107 / 15
Регистрация: 28.01.2009
Сообщений: 481
18.12.2009, 19:27
Студворк — интернет-сервис помощи студентам
Давайте, все же, лучше научим Вас пользоваться debugger'ом.
Слева в IDE в редакторе есть широкая вертикальная полоса. Если Вы запустите приложение и переключитесь по Alt-Tab в IDE - на этой полоске увидите голубые точки. Вот на этой полосе, к примеру, на строке #1 (согласно Вашего листинга) кликните мышкой. Должна появится большая жирная красная точка (breakpoint).
Дальше - трассируем (F8/F7) и смотрим на значения переменных, сбросив их Ctrl-F5, или непосредственно, наведя на них курсор или Alt-F5.
0
 Аватар для Baratro
4 / 4 / 1
Регистрация: 23.09.2009
Сообщений: 74
18.12.2009, 19:54  [ТС]
Ex_Soft, Спасибо вам!
C++
1
2
3
4
5
6
if(strstr(line, s4) != NULL)
    {
    MediaPlayer1->FileName = line;
    MediaPlayer1->Open();
    MediaPlayer1->Play();
           }
должно работать, в принципе..
а может ли "Ошибка инициализации MCI" возникать из-за того, что у нас энное количество завершающих нулей в коде?..

Добавлено через 15 минут
И, попутно, как их вырезать (\0) из строки? (ибо их великое множество)
0
 Аватар для Ex_Soft
213 / 107 / 15
Регистрация: 28.01.2009
Сообщений: 481
18.12.2009, 20:33
Цитата Сообщение от Baratro Посмотреть сообщение
как их вырезать (\0) из строки? (ибо их великое множество)
О-о-о! Уже видно, что Вы debugger'ить начали Вырезать их не надо. Все строки в C до первого '\x0'.
Цитата Сообщение от Baratro Посмотреть сообщение
а может ли "Ошибка инициализации MCI" возникать из-за того, что у нас энное количество завершающих нулей в коде?..
Не думаю. Можете точно строчку показать на какой эта ошибка вываливается?

P.S. В этом листинге:
C++
1
Label2->Caption = ListBox1->Items->Strings[ListBox1->ItemIndex];
Схлопочите exception если ListBox1 будет пустой.
C++
1
2
3
4
5
6
7
8
9
AnsiString s3=ListBox1->Items->Strings[ListBox1->ItemIndex];
        char *s4=new char [s3.Length()+1];
        strcpy(s4, s3.c_str());
        while(f.getline(line, sizeof(line)))
        {
        if(strstr(line, s4) != NULL)
        {
          SoundPath = s4;
          MediaPlayer1->FileName = SoundPath;
сделайте просто
C++
1
2
3
4
5
6
7
while(f.getline(line, sizeof(line)))
{
   if(strstr(line,ListBox1->Items->Strings[ListBox1->ItemIndex].с_str()))
   // ||
   if(AnsiString(line).Pos(ListBox1->Items->Strings[ListBox1->ItemIndex]))
   {
      MediaPlayer1->FileName=ListBox1->Items->Strings[ListBox1->ItemIndex];
/me думает: рано Вам еще память выделять...

P.S. Что и в каком виде/формате у Вас в файле и ListBox1?
0
 Аватар для Baratro
4 / 4 / 1
Регистрация: 23.09.2009
Сообщений: 74
18.12.2009, 20:42  [ТС]
C++
1
Label2->Caption = ListBox1->Items->Strings[ListBox1->ItemIndex];
код переделывала..листинг теперь страшненький)
Цитата Сообщение от Ex_Soft Посмотреть сообщение
P.S. Что и в каком виде/формате у Вас в файле и ListBox1?
В файле записаны полные пути к трекам, пример:
E:\MUSIC\Dark Moor - 2009 - Autumna\01 Swan Lake.mp3
E:\MUSIC\Dark Moor - 2009 - Autumna\02 On The Hill Of Dreams.mp3
В Листбокс - имена треков..
суть действий состоит в том, чтобы выделяю в листбокс строку (которая содержит имя файла) проигрывать его согласно пути..
Ошибка появляется при попытке воспроизвести:
MediaPlayer1->Play();
Думаю, что это связано как-то, всё-таки, с переменной, в которой мы его храним, так как:

такое количество нулей..не думаю, что это нормально..
0
 Аватар для Ex_Soft
213 / 107 / 15
Регистрация: 28.01.2009
Сообщений: 481
18.12.2009, 21:16
Вот Вам работающая у меня дрозофила
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 
TMainForm *MainForm;
//---------------------------------------------------------------------------
 
__fastcall TMainForm::TMainForm(TComponent* Owner):TForm(Owner)
{
   //MediaPlayer1->DeviceType=dtAutoSelect;
   //MediaPlayer1->AutoOpen=true;
}
//---------------------------------------------------------------------------
 
void __fastcall TMainForm::ListBox1Click(TObject *Sender)
{
   if(ListBox1->ItemIndex>=0)
   {
      MediaPlayer1->FileName=ListBox1->Items->Strings[ListBox1->ItemIndex];
      MediaPlayer1->Open();
      try
      {
         MediaPlayer1->Play();
      }
      catch(EMCIDeviceError &eException)
      {
         ShowMessage(eException.Message);
      }
   }
}
//---------------------------------------------------------------------------
Мне удалось только вызвать EMCIDeviceError "No MCI device open", закомментировав MediaPlayer1->Open();
А так - работает.

P.S. BCB6+Upg4 XP+SP2

P.P.S. На нули - не обращайте внимание. А еще лучше - почитайте букварик на предмет как в Cях работают со строками.
0
 Аватар для Baratro
4 / 4 / 1
Регистрация: 23.09.2009
Сообщений: 74
18.12.2009, 21:25  [ТС]
Ex_Soft, Понимаете, у меня не будет сиё работать, так как мне нужно брать путь к треку из файла, а не из листбокса..
0
 Аватар для Зоти Сергей
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
18.12.2009, 21:40
Может сделать проще:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
TStringList * List = new TStringList;
        List->LoadFromFile("Test.txt");
 
        for(int i=0;i<List->Count;i++)
        {
            AnsiString CurrentSelectedText=ListBox1->Items->Strings[ListBox1->ItemIndex];
                if(List->Strings[i].Pos(CurrentSelectedText))
                {
                    ShowMessage(List->Strings[i]);
                }
        }
 
        delete List;
0
 Аватар для Baratro
4 / 4 / 1
Регистрация: 23.09.2009
Сообщений: 74
18.12.2009, 21:48  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 TStringList * List = new TStringList;
        List->LoadFromFile("PlayList.txt");
 
        for(int i=0;i<List->Count;i++)
        {
                AnsiString CurrentSelectedText=ListBox1->Items->Strings[ListBox1->ItemIndex];
                if(List->Strings[i].Pos(CurrentSelectedText))
                {
                        SoundPath=List->Strings[i];
                        MediaPlayer1->FileName = SoundPath;
        MediaPlayer1->Open();
        MediaPlayer1->Play();
        Label2->Caption = ListBox1->Items->Strings[ListBox1->ItemIndex];
    TrackInfo();
    ProgressBar1->Max = MediaPlayer1->TrackLength[1]/1000;
    ProgressBar1->Position = 0;
    timermin=0; timermin1=0;
    timersec=0; timersec1=0;
    Timer1->Enabled = true;
    SpeedButton8->Hint = "Приостановить";
    SpeedButton8->Tag = 1;
                }
        }
делаем так..результат тот же (No MCI Device Open)
0
 Аватар для Ex_Soft
213 / 107 / 15
Регистрация: 28.01.2009
Сообщений: 481
18.12.2009, 21:52
Цитата Сообщение от Baratro Посмотреть сообщение
так как мне нужно
/me думает: це якийсь капєць... Вы знаете, что такое дрозофила? Зачем Вам ковырятся в куче строк огромного проекта, когда проблемный кусок кода можно оттестить на трех строках? Вот Вам проект - проверьте у себя его на работоспособность.
Вложения
Тип файла: zip TestMediaPlayer.zip (3.91 Мб, 26 просмотров)
0
 Аватар для Зоти Сергей
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
18.12.2009, 22:07
Тока шо проверил, усе работает. Вот рабочий код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        TStringList * List = new TStringList;
        List->LoadFromFile("Test.txt");
 
        for(int i=0;i<List->Count;i++)
        {
            AnsiString CurrentSelectedText=ListBox1->Items->Strings[ListBox1->ItemIndex];
                if(List->Strings[i].UpperCase().Pos(CurrentSelectedText.UpperCase()))
                {
                    MediaPlayer1->FileName = List->Strings[i].UpperCase();
                    MediaPlayer1->Open();
                    MediaPlayer1->Play();
                }
        }
 
        delete List;
0
 Аватар для Baratro
4 / 4 / 1
Регистрация: 23.09.2009
Сообщений: 74
18.12.2009, 22:19  [ТС]
Зоти Сергей,
вот проджект:
Новая папка (3).rar
Та же ошибка!
0
 Аватар для Зоти Сергей
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
18.12.2009, 22:33
Скиньте исходник. И еще... У Вас там таймер. В нем чего то делается... Наверняка что то, типа:

ProgressBar1->Position=MediaPlayer1->Position/1000;

Он у вас , случайно по умлолчанию не в true не стоит?
(Timer1->Enabled)
0
 Аватар для Baratro
4 / 4 / 1
Регистрация: 23.09.2009
Сообщений: 74
18.12.2009, 22:35  [ТС]
ProgressBar1->Position=MediaPlayer1->Position; - это в таймере есть
по умолчанию таймер стоит в фолс
0
 Аватар для Baratro
4 / 4 / 1
Регистрация: 23.09.2009
Сообщений: 74
18.12.2009, 22:41  [ТС]
Курсовой проект(программа).rar
0
 Аватар для Baratro
4 / 4 / 1
Регистрация: 23.09.2009
Сообщений: 74
18.12.2009, 22:41  [ТС]
в исходнике много лишних (закоментированных) кусков кода
0
 Аватар для Зоти Сергей
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
18.12.2009, 22:51
Какая версия Borland C++ Builder?
У меня в пятом не хочет открывать проект.
Напишите, я сегодня скачаю и установлю.
0
 Аватар для Baratro
4 / 4 / 1
Регистрация: 23.09.2009
Сообщений: 74
18.12.2009, 22:54  [ТС]
Borland Developer Studio 2006: Turbo C++
0
 Аватар для Зоти Сергей
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
18.12.2009, 22:56
Уже качаю...
0
 Аватар для Baratro
4 / 4 / 1
Регистрация: 23.09.2009
Сообщений: 74
18.12.2009, 23:00  [ТС]
Зоти Сергей, Буду очень-очень благодарна, если вы мне поможете с данной проблемой..
ибо мне нужно за выходные всё закончить, а из-за этого уже не знаю, куда себя девать..

Добавлено через 2 минуты
Зоти Сергей, ещё такой вопрос..вы, случайно, не знаете, почему при попытке открытия видео формата *avi звук воспроизводит, а картинка отсутвует.. Требует программу распаковки 'vids..
0
 Аватар для Зоти Сергей
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
18.12.2009, 23:08
Похоже, что кодека не хватает. VIDS входит в комплект divx. А обычным Windows Media Player ом проигрыватся. И еще. Не проигрывается один файл, или видеофайлы вообще?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.12.2009, 23:08

Как можно переместить всю строку в другую таблицу при помощи запроса
Как можно переместить всю строку в другую таблицу при помощи запроса зная значение одного поля? ADOQuery2-&gt;Close(); ...

Strstr не работает (определить вхождение символа в строку)
делаю так const char set_numbers = &quot;0123456789.&quot;; char c = '1'; if (strstr(set_numbers, &amp;c) true; else false; все время...

Возвратить строку из функции
Привет Всем! Пытаюсь разобраться с тем как можно возвратить строку из функции собственно вот мой код #include &lt;stdio.h&gt; ...

Как в функции возвратить строку?
Как возвратить в функции строку? При таком написании возвращает мусор, но не как не нолики?! char * seachfile(char str_source, char...

Возвратить строку без ненужных символов и слов
Применяю: $text='text1 &quot;word1&quot; text2 &quot;&quot; &quot;blahblahblah blah\n&quot; &quot;blahblahblah&quot; text1 &quot;word2&quot; text2...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

Новые блоги и статьи
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru