Как проверить количество столбцов в файле для удовлетворения условия

Ответ от hedrewness будет работать, но он изменяет весь подход к тому, чтобы провайдер, такой как Jackson + JAXB, автоматически конвертировал возвращаемый объект в какой-то выходной формат, такой как JSON. Вдохновленный Apache CXF post (который использует класс, специфичный для CXF), я нашел один способ установить код ответа, который должен работать в любой реализации JAX-RS: ввести контекст HttpServletResponse и вручную установить код ответа. Например, вот как установить код ответа на CREATED, когда это необходимо.

@Path("/foos/{fooId}")
@PUT
@Consumes("application/json")
@Produces("application/json")
public Foo setFoo(@PathParam("fooID") final String fooID, final Foo foo, @Context final HttpServletResponse response)
{
  //TODO store foo in persistent storage
  if(itemDidNotExistBefore) //return 201 only if new object; TODO app-specific logic
  {
    response.setStatus(Response.Status.CREATED.getStatusCode());
  }
  return foo;  //TODO get latest foo from storage if needed
}

Улучшение: После поиска другого связанного ответа Я узнал, что в качестве переменной-члена можно ввести HttpServletResponse, даже для класса обслуживания Singleton (по крайней мере, в RESTEasy)! Это гораздо лучший подход, чем загрязнение API с помощью деталей реализации. Это будет выглядеть так:

@Context  //injected response proxy supporting multiple threads
private HttpServletResponse response;

@Path("/foos/{fooId}")
@PUT
@Consumes("application/json")
@Produces("application/json")
public Foo setFoo(@PathParam("fooID") final String fooID, final Foo foo)
{
  //TODO store foo in persistent storage
  if(itemDidNotExistBefore) //return 201 only if new object; TODO app-specific logic
  {
    response.setStatus(Response.Status.CREATED.getStatusCode());
  }
  return foo;  //TODO get latest foo from storage if needed
}

0
задан Bender the Greatest 13 July 2018 в 19:39
поделиться

1 ответ

Я собираюсь предположить, что ваш текстовый файл находится в формате CSV, я не могу представить, с каким форматом вы работаете, если это таблица текстовых файлов и не отформатирована как CSV.

Если у вашего CSV есть заголовки

Обработать файл CSV и подсчитать количество свойств в результирующем объекте Powershell.

$columnCount = @( ( Import-Csv '\path\to\file.txt' ).PSObject.Properties ).Count

Нам нужно заставить объект Properties к массиву (который является синтаксисом @()), чтобы точно получить счет. Свойство PSObject является скрытым свойством для метаданных об объекте в Powershell, в котором мы ищем Properties (имена столбцов) и получаем количество их.

CSV без заголовки

Если ваш CSV не имеет заголовков, Import-Csv требует, чтобы вы вручную указывали заголовки. Есть трюки, которые вы можете сделать, чтобы создавать уникальные имена столбцов «на лету», но они слишком сложны, просто получая подсчет столбцов.

Чтобы взять то, что вы уже пробовали выше, мы можем получить данные в первой строке и обрабатывать количество столбцов, хотя вы делали это неправильно в вопросе. Вот как это сделать:

$columnCount = ( ( Get-Content "\path\to\file.txt" | Select-Object -First 1 ) -Split ',' ).Count

Что было не так с оригиналом

Оба вышеописанных решения объединяют счетчик столбцов до одной строки кода. Но в вашем исходном примере вы сделали пару небольших ошибок:

$columns=( Get-Content "\path\to\file.txt" | select  -First 1 ).Split(",")

# You forgot to prepend "columns" with a $. Should look like the below line
$Count=$columns.count

И вы забыли использовать фигурные скобки с блоком if:

if ($count -eq 280) {
  echo "column count is:$count"
} else { 
  email
}

Что касается использования оператор -Split по сравнению с методом .Split() - это чисто стилистическое предпочтение с моей стороны, и использование Split() вполне допустимо.

0
ответ дан Bender the Greatest 17 August 2018 в 12:15
поделиться
  • 1
    получение этой ошибки: Import-Csv: член & quot; 00000000000000.00 & quot; уже присутствует. – harish v 13 July 2018 в 19:16
  • 2
    У вас есть несколько столбцов с тем же именем? – Bender the Greatest 13 July 2018 в 19:17
  • 3
    несколько столбцов содержат одни и те же данные, я должен учитывать количество столбцов и видеть, соответствует ли оно ожидаемому числу – harish v 13 July 2018 в 19:19
  • 4
    У CSV нет заголовков? Я отправлю альтернативное решение. В этом случае вам нужно вручную указать имена заголовков, и хотя я могу думать о нескольких способах его динамического преобразования, они не будут простыми. – Bender the Greatest 13 July 2018 в 19:21
  • 5
    Независимо от того, какой файл я имею в виду, нет имен заголовков, все, что я должен проверить, это содержит 280 столбцов или нет. – harish v 13 July 2018 в 19:23
Другие вопросы по тегам:

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