Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
 Аватар для Baratro
4 / 4 / 1
Регистрация: 23.09.2009
Сообщений: 74

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

18.12.2009, 17:03. Показов 5610. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе. Самым главным критерием для меня было создание паролей, в котором отсутствуют знаки: | 1 l I Обработка содержит реквизиты: -. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru