Как удалить последний символ в файле c

Обновлено: 07.07.2024

Мне нужна помощь в удалении последнего символа в txt-файле. Например, если мой txt-файл содержит 1234567, мне нужен код C++ для удаления последнего символа, чтобы файл стал 123456. Спасибо, ребята.

4 ответа

У меня возникли некоторые проблемы с попыткой удалить последний символ NSString. Я вроде как новичок в Objective-C и понятия не имею, как это сделать. Не могли бы вы, ребята, зажечь меня?

Построение строки для запроса post следующим образом, var itemsToAdd = sl.SelProds.ToList(); if (sl.SelProds.Count() != 0) < foreach (var item in itemsToAdd) < paramstr = paramstr + string.Format(productID=&, item.prodID.ToString()); > > после того , как я получу результирующий paramstr .

Единственный способ сделать это в переносимом коде-прочитать данные и записать все, кроме последнего символа.

Если вы не возражаете против непереносимого кода, большинство систем предоставляют способы усечения файла. Традиционный метод Unix состоит в том, чтобы найти место, где вы хотите, чтобы файл заканчивался, а затем выполнить запись в файл 0 байт в этой точке. На Windows вы можете использовать SetEndOfFile. Другие системы будут использовать другие имена и/или методы, но почти все они будут иметь такую возможность в той или иной форме.

Для портативного решения что-то в этом роде должно выполнять эту работу:

Вот более надежный метод, основанный на ответе Алекса Z:

Хитрость заключается в этих строках, которые позволяют эффективно считывать весь файл в строку, а не только токен:

Это вдохновлено первым решением Джерри Коффина в этом посте . Предполагается, что это будет самое быстрое решение.

Если входной файл не слишком велик, вы можете выполнить следующие действия:-

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

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

Каков самый простой способ удалить последний символ в файле в Java?

Как удалить последний символ из строки C++? Я попробовал st = substr(st.length()-1); , но это не сработало.

Я хотел бы получить последний символ в файле, используя следующий код FILE * f = fopen ( f_text, r ); if (f ) < if (fseek( f, -1, SEEK_END ) != 0 ) fclose (f); char last[1]; fgets(last, 1, f ); .

У меня возникли некоторые проблемы с попыткой удалить последний символ NSString. Я вроде как новичок в Objective-C и понятия не имею, как это сделать. Не могли бы вы, ребята, зажечь меня?

Построение строки для запроса post следующим образом, var itemsToAdd = sl.SelProds.ToList(); if (sl.SelProds.Count() != 0) < foreach (var item in itemsToAdd) < paramstr = paramstr +.

Как удалить первый и последний символ из std::string, я уже делаю следующий код. Но этот код удаляет только последний символ m_VirtualHostName = m_VirtualHostName.erase(m_VirtualHostName.size() - 1).

Кажется, это должно быть легко,но я просто не могу понять. Как удалить самый последний символ файла с помощью Ruby IO? Я взглянул на ответ на удаление последней строки файла с Ruby, но не до конца.

У меня есть текстовый файл, в который я записываю первые 10 символов, вводимых пользователем: int x=0; ofstream fout(out.txt); while (x<=10) < char c=getch(); if (c==8)//check for backspace.

Мне нужно удалить первый и последний символ из каждой строки текстового файла. например: Ввод $cat file1.txt |head1|head2|head3| |1|2|3| |2|3|4| Выход: head1|head2|head3 1|2|3 2|3|4

Я хочу удалить последний символ текстового файла. У меня есть код, который сохраняет строки, и мне нужно удалить только последний \n. Я уже пытался это сделать: fseek(fp, -1, SEEK_END); fputs(, fp);.

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Возвращает новую строку, в которой удалено указанное число знаков текущей строки.

Перегрузки

Возвращает новую строку, в которой было удалено указанное число символов в указанной позиции.

Возвращает новую строку, в которой были удалены все символы, начиная с указанной позиции и до конца в текущем экземпляре.

Remove(Int32, Int32)

Возвращает новую строку, в которой было удалено указанное число символов в указанной позиции.

Параметры

Отсчитываемая от нуля позиция, с которой начинается удаление знаков.

Число символов для удаления.

Возвращаемое значение

Новая строка, эквивалентная данному экземпляру за минусом удаленных знаков.

Исключения

Значение параметра startIndex или count меньше нуля.

startIndex плюс count указывает позицию за пределами этого экземпляра.

Примеры

В следующем примере показано, как можно удалить отчество из полного имени.

Комментарии

Этот метод не изменяет значение текущего экземпляра. Вместо этого он возвращает новую строку, в которой было удалено количество символов, указанное в count параметре. Символы удаляются в позиции, указанной в параметре startIndex .

См. также раздел

Применяется к

Remove(Int32)

Возвращает новую строку, в которой были удалены все символы, начиная с указанной позиции и до конца в текущем экземпляре.

Параметры

Отсчитываемая от нуля позиция, с которой начинается удаление знаков.

Возвращаемое значение

Новая строка, эквивалентная данной строке за минусом удаленных знаков.

Исключения

Значение параметра startIndex меньше нуля.

startIndex указывает положение, которое находится за пределами этой строки.

Примеры

В следующем примере демонстрируется Remove метод. В этом случае весь текст, начиная с указанного индекса, удаляется с конца строки. В последнем случае удаляются три символа, начиная с указанного индекса.

Комментарии

Этот метод не изменяет значение текущего экземпляра. Вместо этого возвращается новая строка, в которой удаляются все символы, начиная с startIndex конца исходной строки.

miraage

Mikhail Osher: ну это для меня не очень удобно. я еле разобрал, что код, а что нет. сначала я вообще решил, что вы мне исходник расширения на каком-то странном языке даёте.

miraage

Вадим Егоров: "w" - очищает файл. если надо срезать 1 символ - плохая затея.

woonem

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

woonem

Mikhail Osher: так не расскажете, почему в mode можно писать что угодно?

miraage

Вадим Егоров: откройте документацию и прочитайте. там всё написано.

miraage

Вадим Егоров: Windows offers a text-mode translation flag ('t') which will transparently translate \n to \r\n when working with the file. In contrast, you can also use 'b' to force binary mode, which will not translate your data. To use these flags, specify either 'b' or 't' as the last character of the mode parameter.

woonem

Mikhail Osher: да как-раз уже нашел.
>вы также можете использовать 'b', чтобы принудительно включить бинарный режим
Просто когда читал, не понял, что t или b надо в mode писать.

И почему у всех тяга к англ. документации.

woonem

Mikhail Osher: хотя там написано
>Чтобы использовать эти режимы, укажите 'b' или 't' последней буквой параметра mode.

Я хочу удалить последний символ из строки. Я пытался сделать это:

Получаем длину строки - 1 и заменяем последнюю букву ничем (удаляя ее), но каждый раз, когда я запускаю программу, она удаляет средние буквы, которые совпадают с последней буквой.

Например, слово «поклонник»; после запуска метода я получаю «восхищение». Я хочу вернуть слово восхищаться.

replace заменит все экземпляры письма. Все, что вам нужно сделать, это использовать substring() :

@Marko LOL Да, так как это стандарт, странно, когда люди делают свои вещи. @AdamJensen В C вы можете случайно написать, if (str = NULL) что не только всегда будет иметь значение false (NULL == 0 == false), но также назначит значение, str которое, скорее всего, не то, что вы хотели сделать. Однако вы не могли написать, if (NULL = str) потому что NULL не является переменной и не может быть назначен. Таким образом, безопаснее ставить NULL слева. Это не проблема в Java, хотя.

Почему не только один лайнер?

демонстрация

Проверка на пустую и пустую строку должна быть рассмотрена .. Версия @BobBobBob лучше @KDjava: выше допустимо с учетом того, что допустимая строка передана. иначе я должен был бы добавить блок try catch также, чтобы проверить правильность строки . я добавил проверку на нулевую строку перед return str.substring(0,str.length()-1); улучшением @FahimParkar: Потому что, возможно, последний символ не тот, который мы хотим удалить. Но по вопросу, ваш ответ правильный

Поскольку мы находимся на тему, можно использовать регулярные выражения тоже

хороший способ, когда вы хотите / должны точно определить, что вы хотите обрезать от конца строки, а не только X независимо от символов

Описанная проблема и предлагаемые решения иногда относятся к удалению разделителей. Если это ваш случай, взгляните на Apache Commons StringUtils, у него есть метод removeEnd который очень элегантен.

Результатом будет: «строка 1 | строка 2 | строка 3»

Что, если последний символ - суррогатная пара высокого / низкого уровня? @RobertAllanHenniganLeahy Я опубликовал ответ, который обрабатывает этот сценарий. Если вы хотите удалить ТОЛЬКО последний символ - это лучший ответ! Нет, это не так, потому что «использовать Java» - ужасный ответ на вопрос котлина. @ MikkelLøkke Я не знаю, но этот вопрос не является вопросом Kotlin в любом случае ??

Например, слово «поклонник»; после запуска метода я получаю «восхищение». Я хочу вернуть слово восхищаться.

Если вы пытаетесь остановить английские слова

Стемминг - это процесс приведения слов с перегибом (или иногда производных) к их основам, основам или корням - как правило, в письменной форме слова.

.

Например, для английского языка в стеммере следует указывать строку «кошки» (и, возможно, «кошачьи», «кошачий» и т. Д.) Как основанную на корне «кошка», а слова «стеммер», «стволовый», «стволовый» как основанный на "стебле". Алгоритм stemming сводит слова «рыбалка», «выловленный», «рыба» и «рыболов» к корневому слову «рыба».

Читайте также: