Как я получаю только решительное количество слов от строки в php?

Выезд Добавляющий Консольный ввод-вывод к Приложению для GUI Win32. Это может помочь Вам сделать то, что Вы хотите.

, Если Вы не имеете или не можете изменить код, пробуют предложения, найденные здесь для перенаправления консольного вывода в файл.

Редактирование: бит некромантии потока здесь. Я сначала ответил на это 9ish несколько лет назад в первые годы Так, прежде чем (хорошая) политика ответов non-link-only вошла в силу. Я повторно отправлю код от исходной статьи в надежде искупить мои прошлые грехи.

guicon.cpp - консольная функция перенаправления

#include 
#include 
#include 
#include 
#include 
#include 
#ifndef _USE_OLD_IOSTREAMS
using namespace std;
#endif
// maximum mumber of lines the output console should have
static const WORD MAX_CONSOLE_LINES = 500;
#ifdef _DEBUG
void RedirectIOToConsole()
{
    int hConHandle;
    long lStdHandle;
    CONSOLE_SCREEN_BUFFER_INFO coninfo;
    FILE *fp;

    // allocate a console for this app
    AllocConsole();

    // set the screen buffer to be big enough to let us scroll text
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);
    coninfo.dwSize.Y = MAX_CONSOLE_LINES;
    SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize);

    // redirect unbuffered STDOUT to the console
    lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    fp = _fdopen( hConHandle, "w" );
    *stdout = *fp;
    setvbuf( stdout, NULL, _IONBF, 0 );

    // redirect unbuffered STDIN to the console
    lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE);
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    fp = _fdopen( hConHandle, "r" );
    *stdin = *fp;
    setvbuf( stdin, NULL, _IONBF, 0 );

    // redirect unbuffered STDERR to the console
    lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    fp = _fdopen( hConHandle, "w" );
    *stderr = *fp;
    setvbuf( stderr, NULL, _IONBF, 0 );

    // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog
    // point to console as well
    ios::sync_with_stdio();
}

#endif
//End of File

guicon.h - Интерфейс для консольного подключения к функции перенаправления

#ifndef __GUICON_H__
#define __GUICON_H__
#ifdef _DEBUG

void RedirectIOToConsole();

#endif
#endif

// End of File

test.cpp - перенаправление консоли Demonstrating

#include 
#include 
#include 
#include 
#include 
#ifndef _USE_OLD_OSTREAMS
using namespace std;
#endif
#include "guicon.h"


#include 

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
    #ifdef _DEBUG
    RedirectIOToConsole();
    #endif
    int iVar;

    // test stdio
    fprintf(stdout, "Test output to stdout\n");
    fprintf(stderr, "Test output to stderr\n");
    fprintf(stdout, "Enter an integer to test stdin: ");
    scanf("%d", &iVar);
    printf("You entered %d\n", iVar);

    //test iostreams
    cout << "Test output to cout" << endl;
    cerr << "Test output to cerr" << endl;
    clog << "Test output to clog" << endl;
    cout << "Enter an integer to test cin: ";
    cin >> iVar;
    cout << "You entered " << iVar << endl;
    #ifndef _USE_OLD_IOSTREAMS

    // test wide iostreams
    wcout << L"Test output to wcout" << endl;
    wcerr << L"Test output to wcerr" << endl;
    wclog << L"Test output to wclog" << endl;
    wcout << L"Enter an integer to test wcin: ";
    wcin >> iVar;
    wcout << L"You entered " << iVar << endl;
    #endif

    // test CrtDbg output
    _CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE );
    _CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDERR );
    _CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_FILE );
    _CrtSetReportFile( _CRT_ERROR, _CRTDBG_FILE_STDERR);
    _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );
    _CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDERR);
    _RPT0(_CRT_WARN, "This is testing _CRT_WARN output\n");
    _RPT0(_CRT_ERROR, "This is testing _CRT_ERROR output\n");
    _ASSERT( 0 && "testing _ASSERT" );
    _ASSERTE( 0 && "testing _ASSERTE" );
    Sleep(2000);
    return 0;
}

//End of File

8
задан JasonBartholme 11 July 2009 в 04:25
поделиться

3 ответа

Я бы не рекомендовал использовать количество слов в качестве основы. Вы легко можете получить намного меньше или намного данных, чем вы намеревались отобразить.

Один из подходов, который я использовал в прошлом, - это запросить желаемую длину, но убедитесь, что он не обрезает слово. Вот' Кроме того, вы могли бы , хотя это несколько хакер, разбивая строку на пробелы и т. Д. Но это дает много места для ошибок, например, вещи, которые не являются словами, считаются словами.

PS. Если вам нужна безопасная версия Unicode вышеуказанной функции и у вас установлены расширения mbstring или iconv , просто замените все строковые функции их mb_ или iconv_ эквиваленты с префиксом.

15
ответ дан 5 December 2019 в 05:34
поделиться

Вы уверены, что хотите определенное количество слов? Если вы делаете что-то вроде «предварительного просмотра», обычно лучше сделать что-то вроде «До 300 символов, обрезанные по границе слова», и в этом случае вы можете использовать что-то вроде:

if (strlen($str)>300)
{
  $str = substr($str,0,300);
  $pos = strrpos($str, ' ');
  if ($pos !== false && $pos > 200) // If there is no space in the last 100 chars, just truncate
    $str = substr($str,0,$pos);
  // You may also want to add ellipses:
  // $str .= '...';
}
2
ответ дан 5 December 2019 в 05:34
поделиться

str_word_count принимает необязательный параметр, который сообщает, что возвращать.

Возвращает массив строк, которые представляют собой слова:

$words = str_word_count($var, 1);

Затем вы можете разделить вещи примерно такими:

$len = min(50, count($words));
$first_fifty = array_slice($words, 0, $len);
10
ответ дан 5 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: