У кого-либо есть работа B компилятором? [закрытый]

Я нашел 2 решения. Этот первый использует большинство решений @ Dave2e, но вместо того, чтобы использовать do.call(rbind, dfs), чтобы связать все dfs в одно, я использовал dplyr::bind_rows(). do.call(rbind, dfs) не работал, потому что мои столбцы заголовков иногда имели немного разные имена, что приводило к этой ошибке: Error in match.names(clabs, names(xi)) : names do not match previous names. dplyr::bind_rows() был более гибким с разными именами столбцов. Я также использую readr::read_csv вместо read.csv для личных предпочтений.

# First solution using most of @Dave2e's solution
library(tidyverse)

# Path to the data
data_path <- "Data/RACC_2012-2016/discharge"
# Get all CSV file names
file_names = dir(data_path, pattern = "*.csv", recursive = TRUE)

# Loop and read all files
dfs <- lapply(file.path(data_path, file_names), function(f) {
  # Find header row
  headerline <- grep("agency_cd", readLines(f))
  # Read data with header row and following row
  # by reading the header row bind will align the columns
  df <- read_csv(f, col_types = cols(.default = "c"), skip = headerline-1)
}) %>% 
  # Bind all into one data frame
  bind_rows() %>% 
  # Filters the row below the header row that doesn't contain data
  dplyr::filter(agency_cd != "5s") %>% 
  # Combine "Gage Height" and "Gage height" columns into one
  # First rename the columns to make them easier to call
  rename(Gage_height = "Gage Height", Gage_height2 = "Gage height") %>% 
  mutate(Gage_height = ifelse(is.na(Gage_height), Gage_height2, Gage_height)) %>% select(-Gage_height2)

Второе решение выполняет то же самое, что и решение 1, за исключением того, что оно также позволило мне добавить исходные имена файлов в виде столбца в конечном кадре данных. Вместо lapply, как указано выше, я использую purrr::map. И я также использую пакет fs для работы с путями к файлам.

# Second solution

library(tidverse)
library(fs)

# Path to the data
data_path <- "Data/RACC_2012-2016/discharge"

# Bind all files together to form one data frame
discharge <-
  # Find all file names ending in CSV in all subfolders
  fs::dir_ls(data_path, regexp = "*.csv", recursive = TRUE) %>% 
  # Create a dataframe holding the file names
  data_frame(filename = .) %>% 
  # Read in all CSV files into a new data frame, 
         # Create a new column with the filenames
  mutate(file_contents = map(filename, 
                             # Here we append path to the data before the file name & force all columns to be as character
                             # because the typecasting was causing problems
                             # We use skip = grep("agency_cd", readLines(.))-1)) to find header row
                             ~ read_csv(., col_types = cols(.default = "c"), skip = grep("agency_cd", readLines(.))-1))
        ) %>% 
  # Unpack the list-columns to make a useful data frame
  unnest() %>% 
  # Filters the row below the header row that doesn't contain data
  dplyr::filter(agency_cd != "5s") %>% 
  # Combine "Gage Height" and "Gage height" columns into one
  # First rename the columns to make them easier to call
  rename(Gage_height = "Gage Height", Gage_height2 = "Gage height") %>% 
  mutate(Gage_height = ifelse(is.na(Gage_height), Gage_height2, Gage_height)) %>% select(-Gage_height2)

Спасибо всем за помощь! Я также получил помощь от: https://serialmentor.com/blog/2016/6/13/reading-and-combining-many-tidy-data-files-in-R и Как импортировать несколько файлов .csv одновременно?

24
задан Triang3l 17 September 2012 в 17:38
поделиться

2 ответа

В ответ на этот вопрос теперь доступен компилятор B: https://github.com/Leushenko/ybc

Работает в Windows, Linux и OSX ( предоставленные двоичные файлы (в духе вопроса он написан на неясном языке), где он производит сборку x86-32 очень низкого качества. Должен быть GCC-совместимым. Он реконструирован из имеющегося справочного материала по B и почти наверняка не отражает язык, каким он был в 1960-х годах. Примечательно, что в отсутствие информации о типе (B нетипизирован) правило &a[b] == &*(a + b) не может содержать в x86, что означает, что эта задача фактически невозможна (без обращения к интерпретатору).

Кроме того, комментарий Павла Минаева является правильным: язык , как описано , чрезвычайно мал, намного меньше, чем C, и опытный / компетентный программист компилятора, вероятно, мог бы написать его для вас днем.

К сожалению, это только частичный ответ, так как я не мог сказать вам, где найти хороший компилятор B.

13
ответ дан 29 November 2019 в 00:17
поделиться

У вас есть Honeywell 6050, на котором запущена ГСНК? Или, может быть, эмулятор? Я знаю, что IBM 360 и 370 были эмулированы, но я еще не слышал об эмуляторе Honeywell 6000.

В университете Ватерлоо в 1974-76 гг. Я помню, как писал задания CS на языке B, а не на Алголе-60, который использовал большинство людей в классе. Я продолжал писать эмулятор для миникомпьютера HP 2100A, но этот код давно потерян.

Насколько я знаю, B был реализован только в Honeywell с его 36-битной длиной слова, 9-битным ASCII и т. Д. И поскольку он является преемником C, одновременно поражал университеты, он не длиться долго.

Если я правильно помню, Тревор Томпсон, один из основателей MKS, написал стандартную библиотеку ввода-вывода для B, а также написал в ней 3D-игру в шахматы. Если вам удастся отследить его, он тот, кто когда-то имел в своем распоряжении компилятор B. Я только что посмотрел на LinkedIn, и я нашел его. Он является одним из владельцев Satori Solutions .

Если у вас есть машина с GCOS или эмулятор Honeywell серии 60 с GCOS, вы можете использовать компилятор B, включенный в UW Tools Package от Thinkage. Он поддерживает как пакетные, так и TSS программы.

10
ответ дан 29 November 2019 в 00:17
поделиться
Другие вопросы по тегам:

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