Четверг, 18 Апреля 2024, 16:52

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Как у string удалить невидимый символ в конце (и это не \n или \r символ)
Как у string удалить невидимый символ в конце
alexsilentДата: Четверг, 16 Июня 2022, 11:33 | Сообщение # 1
почти ветеран
Сейчас нет на сайте
Пытаюсь сделать переводчик текстов для проекта, чтобы всё в одном месте было.
И чтобы файлы можно было открыть в таблице, с разбивкой по "@".
Проблема в том, что при чтении из текстового файла читается какой-то последний невидимый символ и это не \n \r
из-за этого все текста странно корёжит, как будто текст начинает писать сначала накладываясь на самого себя.
И также если проверить количество символов, то в каждом слове, есть на 1 символ больше, но непонятно на какой.

Прикол в том, что если в конце каждой строки добавить "@" ещё разбивку (этим символом я разбиваю таблицу на яйчейки)
то тот невидимый символ попадает в следущую яйчейку, которая не читается, как бы запасной вариант,
если не смогу убрать этот невидимый символ нормальным способом, то просто его изолирую в следующую яйчейку.

Код

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lang : MonoBehaviour
{

    public TextAsset[] texts;

    // All Translated Texts (String)
    public static Dictionary<string, string> S = new Dictionary<string, string>();

    // Start is called before the first frame update
    void Awake() {
  // Read All Text Files
  for (int a = 0; a < texts.Length; a++) {
   string[] words = texts[a].text.Split("\n"[0]);
   // Read All Lines in One Text File
   for (int n = 0; n < words.Length; n++) {
    if (!Game.isEmpty(words[n])) {
     // Read Cells in One Line
     string[] words2 = words[n].Split("@"[0]);
     
     if (words2.Length > 1) {
      if (!S.ContainsKey(words2[0])) S.Add(words2[0],words2[1]); // Add to Game Text Dictionary
      else print("DOUBLE WORD: "+n+" "+words2[0]+"  ... "+words2[1]);
     }
    }
   }
  }
    }
    // Translate Function
    // Lang.T("text");
    static public string T(string _txt) {
  if (S.ContainsKey(_txt)) {
   _txt = S[_txt];
   return _txt;
  }
  return _txt;
    }
}


Добавлено (16 Июня 2022, 11:35)
---------------------------------------------
В текстовом файле это выглядит пока так, а символ @ я не планирую использовать в текстах проекта,
так что его добавил для разбития яйчеек, если буду открывать в Open Office или Excel таблице:

Код

Play@Играть
Quit Game@Выход из игры
Exit?@Выйти?
yes@Да
no@Нет
Players@Игроки
Hero@Герой
Level@Уровень
Gold@Золото
New@Новый
Delete@Удалить
< Back@< Назад
Delete?@Удалить?
Continue@Продолжить

Добавлено (16 Июня 2022, 11:55)
---------------------------------------------
Ладно, вот такой метод работает (убирая последний символ) и норм,
хотя лучше бы понять как удалять сам конкретный символ:

Код
words2[1] = words2[1].Substring(0,words2[1].Length-1);


Сообщение отредактировал alexsilent - Четверг, 16 Июня 2022, 11:47
DmitriyIMДата: Пятница, 17 Июня 2022, 00:49 | Сообщение # 2
был не раз
Сейчас нет на сайте
alexsilent, вместо Substring можно использовать функцию Remove:
Код
string s = "Text";
s = s.Remove(s.Length - 1, 1);

передав два параметра: начальную позицию (s.Length - 1), с которой начинается удаление символов в строке, и количество удаляемых символов (1).

Добавлено (17 Июня 2022, 01:08)
---------------------------------------------
alexsilent, хотя, в твоем случае лучше использовать именно Substring, так как ты удаляешь последний символ, или, если бы тебе нужно было первый символ удалить.

Remove же полезен, когда нужно удалить символы из середины, то есть, когда у строки остается часть символов ДО удаления и часть ПОСЛЕ, тогда вызвав Remove, тебе не нужно будет объединять эти части...

Хотя, кто сейчас будет запариваться для ускорения кода на 0.01% ;)

GMasstaДата: Пятница, 17 Июня 2022, 09:19 | Сообщение # 3
частый гость
Сейчас нет на сайте
Цитата alexsilent ()
если не смогу убрать этот невидимый символ нормальным способом

Если ты точно скопировал текст из файла, то сплитить можно так:

Код
string[] words = texts[a].text.Replace('\r', ' ').Trim().Split('\n');


я в таких задачах Json юзаю, Быстрее при расчетах и редактировать проще


Make games, not war
Посмотри мои игры для мобилок, влепи лукаса!
Тут я делаю игры на Unity
DmitriyIMДата: Пятница, 17 Июня 2022, 21:17 | Сообщение # 4
был не раз
Сейчас нет на сайте
GMassta, если я правильно понял, то твой код, который ты предлагаешь автору темы, должен работать как с \r\n, так и с \n символами, при этом, еще убирать лишние пробелы по краям (в начале, и в конце) строки за счет Trim?

Но смотри, допустим у нас есть текст:
Код
string s = "Text1\r\nText2";

И мы применяем к нему:
Код
string[] words = s.Replace('\r', ' ').Trim().Split('\n');


Что будет написано в words[0]?
words[0] == "Text1 " ;)

Причина в том, что после Replace, Trim получает "Text1 \nText2", и соответственно не обрабатывает пробел, так как он находится в середине строки, а не с края.

Добавлено (17 Июня 2022, 21:22)
---------------------------------------------
Есть конечно способ, реализовать примерно такой вариант через Regex, если он нужен alexsilent...


Сообщение отредактировал DmitriyIM - Пятница, 17 Июня 2022, 21:22
GMasstaДата: Суббота, 18 Июня 2022, 08:27 | Сообщение # 5
частый гость
Сейчас нет на сайте
Цитата DmitriyIM ()
Но смотри, допустим у нас есть текст:

Автор предоставил текст, а не "допустим у нас есть текст"

Я ж не просто так написал:
Цитата GMassta ()
Если ты точно скопировал текст из файла, то сплитить можно так:


Make games, not war
Посмотри мои игры для мобилок, влепи лукаса!
Тут я делаю игры на Unity


Сообщение отредактировал GMassta - Суббота, 18 Июня 2022, 08:28
alexsilentДата: Суббота, 18 Июня 2022, 11:14 | Сообщение # 6
почти ветеран
Сейчас нет на сайте
Цитата DmitriyIM ()
я в таких задачах Json юзаю, Быстрее при расчетах и редактировать проще

Спасибо!

Цитата GMassta ()
я в таких задачах Json юзаю, Быстрее при расчетах и редактировать проще

Спасибо! Я просто не понимаю как Json нормально редактировать, ибо там просто куча скобок и запутаешься,
вдруг где-нибудь ошибёшься и не добавишь нужную скобку.

А так я взял .csv формат. Как бы таблица с любым кастомным символом для разбивки на яйчейки.
Но обычно редактирую в Notepad++, а не во всяких редакторах таблицы, чтоб быстрее было

Попробую погуглить инструменты для Json файлов, может и правда им проще,
но чисто в блокноте не так просто это всё редактировать. Я ещё и не сильно знаком с правилами Json формата.


Сообщение отредактировал alexsilent - Суббота, 18 Июня 2022, 11:18
drcrackДата: Суббота, 18 Июня 2022, 11:23 | Сообщение # 7
старожил
Сейчас нет на сайте
Цитата
Попробую погуглить инструменты для Json файлов, может и правда им проще,

Не проще. JSON не предназначен для редактирования человеком, это тупо неудобно. Рекомендовать его могут только любители которые больше тетриса ничего никогда не делали.

Для таких задач обычно используют гугл таблицы и импорт из них в движок через официальный API
https://developers.google.com/sheets/api/quickstart/dotnet


Сообщение отредактировал drcrack - Суббота, 18 Июня 2022, 11:24
GMasstaДата: Понедельник, 20 Июня 2022, 09:13 | Сообщение # 8
частый гость
Сейчас нет на сайте
Цитата drcrack ()
Для таких задач обычно используют гугл таблицы и импорт из них в движок через официальный API

Точно, так даже лучше.

Цитата drcrack ()
Рекомендовать его могут только любители которые больше тетриса ничего никогда не делали.

А это не точно, я же порекомендовал.


Make games, not war
Посмотри мои игры для мобилок, влепи лукаса!
Тут я делаю игры на Unity
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Как у string удалить невидимый символ в конце (и это не \n или \r символ)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг